【发布时间】:2014-08-12 09:14:07
【问题描述】:
我遇到了一个小问题,我是 python 中的多处理模块的初学者,我必须创建一个可以随时被 SIGINT 停止的池。
from multiprocessing import Pool, current_process
import signal
import time
import os
class Processor(object):
def __init__(self, stack):
self.stack = stack
self.pool = Pool(processes=4, maxtasksperchild=1, initializer=self._init)
def _init(self):
cp = current_process()
cp.daemon = False
def launch(self):
self.result = self.pool.map(func, self.stack)
self.pool.close()
self.pool.join()
def func(j):
a, b = j
time.sleep(1)
return a * b
def breaker(*args):
p.pool.terminate()
p.pool.join()
def main():
a = 4, 9
b = 5, 7
lst = [a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b]
global p
p = Processor(lst)
signal.signal(signal.SIGINT, breaker)
p.launch()
ret = p.result
for i in ret:
print i
if __name__ == '__main__':
print os.getpid()
main()
在没有任何信号的情况下,代码可以完美执行,但是当我向该进程发送信号时,它不再起作用,并且永远不会调用中断函数。 如果有人知道为什么。
【问题讨论】:
标签: python signals multiprocessing pool