Ho un processo di multiprocessing Python 2.7 che non verrà chiuso all'uscita del processo padre. Ho impostato la flag daemon che dovrebbe costringerlo ad uscire sulla morte dei genitori. I documenti dicono che:Daemon multiprocesso non terminato sull'uscita principale
"Quando un processo termina, tenta di terminare tutti i suoi processi figlio demoniaci".
p = Process(target=_serverLaunchHelper, args=args)
p.daemon = True
print p.daemon # prints True
p.start()
Quando ho terminare il processo padre tramite un comando kill il daemon è rimasto vivo e funzionante (che blocca la porta su corsa successiva). Il processo figlio sta avviando un SimpleHttpServer e chiama serve_forever
senza fare altro. La mia ipotesi è che la parte "tentativi" dei documenti significhi che il processo di blocco del server stia bloccando la morte del processo e che di conseguenza il processo venga reso orfano. Potrei fare in modo che il bambino spinga il serving in un altro Thread e abbia il controllo del thread principale per l'id del processo padre, ma questo sembra un sacco di codice per replicare semplicemente la funzionalità del demone.
Qualcuno ha idea del motivo per cui il flag del daemon non funziona come descritto? Questo è ripetibile su windows8 64 bit e ubuntu12 32 bit vm.
Un riduceva versione della funzione processo è inferiore:
def _serverLaunchHelper(port)
httpd = SocketServer.TCPServer(("", port), Handler)
httpd.serve_forever()
Va bene, quindi se voglio davvero garantire che i bambini smettano quando il genitore muore, ho bisogno di programmare la logica nei processi figli per vedere scomparire i loro genitori. Grazie per la risposta chiara e veloce! – Pyrce