使用python-daemon时,我会像这样创建子进程:
import multiprocessing
class Worker(multiprocessing.Process):
def __init__(self, queue):
self.queue = queue # we wait for things from this in Worker.run()
...
q = multiprocessing.Queue()
with daemon.DaemonContext():
for i in xrange(3):
Worker(q)
while True: # let the Workers do their thing
q.put(_something_we_wait_for())
当我使用Ctrl-C或SIGTERM等方式杀死父守护进程时(即不是Worker),子进程不会死亡。如何杀死子进程?
我的第一个想法是使用atexit 来杀死所有的工作进程,像这样:
with daemon.DaemonContext():
workers = list()
for i in xrange(3):
workers.append(Worker(q))
@atexit.register
def kill_the_children():
for w in workers:
w.terminate()
while True: # let the Workers do their thing
q.put(_something_we_wait_for())
然而,恶魔的孩子是很棘手的事情,我希望能得到关于如何处理这个问题的想法和建议。
谢谢。
from evil import infanticide
或者类似的事情吗? - Syntactic