按预期更正代码: 从多处理导入池 导入信号 导入时间 导入操作系统
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函数时,主要功能被阻塞,并且只有在map函数被funized时才会调用信号处理程序。 因此,使用"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()
您需要使用map_async
方法作为map
块,直到结果尚未准备好。因此,在您的示例中,永远不会达到对terminate
的调用。