按预期更正代码: 来自多处理导入池 进口信号 进口时间 import os
def consumer(i):
while True:
# print os.getpid()
pass
def handler(signum, frame):
print 'Here you go'
signal.signal(signal.SIGTERM, handler)
p = Pool(5)
p.map_async(consumer, [1 for i in range(5)])
while True:
pass
p.terminate()
# p.close()
p.join()
=============================================== ===
我发现了这个问题,当我使用map函数时,主func被阻塞,只有当map函数出现时才会调用信号处理程序。 因此,使用“map_async”函数可以更好地解决这个问题。
这是我发现的:
纯粹在C中实现的长时间运行计算(例如在大量文本上进行正则表达式匹配)可以在任意时间内不间断地运行,无论接收到任何信号。计算完成后将调用Python信号处理程序。
=============================================== ===
我编写了一个类似下面的程序,当我在终端中键入“kill pid”时,我希望在程序中退出/(就像程序打印字符串一样),但它不起作用。是否有任何其他策略阻止SIGTERM进入主函数。
from multiprocessing import Pool
import signal
import time
import os
def consumer(i):
while True:
# print os.getpid()
pass
def handler(signum, frame):
print 'Here you go'
signal.signal(signal.SIGTERM, handler)
p = Pool(5)
p.map(consumer, [1 for i in range(5)])
p.terminate()
# p.close()
p.join()