python Python 2.7多处理和KeyboardInterrupts

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Python 2.7多处理和KeyboardInterrupts相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env python
# http://jtushman.github.io/blog/2014/01/14/python-%7C-multiprocessing-and-interrupts/
from multiprocessing import Process
from multiprocessing.managers import SyncManager
import time
import signal


def mgr_init():
    signal.signal(signal.SIGINT, signal.SIG_IGN)
    print 'initialized manager'


def f(x):
    try:
        if x:
            time.sleep(2)
            print (x.pop())
    except KeyboardInterrupt:
        print('keyboard interrupt in process')


if __name__ == '__main__':
    manager = SyncManager()
    manager.start(mgr_init)
    shared_array = manager.list(range(19))
    processes = []
    try:
        while shared_array:
            if len(shared_array) > 4:
                for i in range(4):
                    p = Process(target=f, args=(shared_array,))
                    p.start()
                    processes.append(p)
            else:
                for i in range(len(shared_array)):
                    p = Process(target=f, args=(shared_array,))
                    p.start()
                    processes.append(p)
            for i in processes:
                i.join()
            processes[:] = []
    except KeyboardInterrupt:
        print('interrupt')
    finally:
        manager.shutdown()

以上是关于python Python 2.7多处理和KeyboardInterrupts的主要内容,如果未能解决你的问题,请参考以下文章

如何在python 2.7中使用pymongo进行多处理池

使用 Python 2.7 引发属性错误的多处理

Windows 上的 Python 2.7,“assert main_name not in sys.modules, main_name”适用于所有多处理示例

Python 2.7_多进程获取简书专题数据

python 2.7后的字符串赋值

Python 2.7 学习笔记 异常处理