При использовании python-daemon, я создаю подпроцессы likeso:Python-демон не убивает своих детей
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())
Однако дети демонами хитрые вещи, чтобы справиться, и я обязан за мысли и о том, как вход это должно быть сделано.
спасибо.
Убийство ваших детей действительно похоже на «демоническую» вещь ... – ewall
Определенно. Этот демон * не * до спецификации. –
Разве это не Python?Вы не можете просто «избавиться от инфантицида» или что-то еще? – Syntactic