При использовании python-daemon я создаю подпроцессы liko:
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 и т.д., дети не умирают. Как убить детей?
Моя первая мысль состоит в том, чтобы использовать atexit, чтобы убить всех работников, likeso:
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())
Тем не менее, дети демонов - это сложные вещи, которые нужно обработать, и я буду обязан мыслями и информацией о том, как это должно быть сделано.
Спасибо.