Processamento de multiprocessamento Python e independência de filhos
No terminal python, eu executo alguns comandos como os seguintes, para gerar um processo filho de longa execução:
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
Esse comando retorna e eu posso fazer outras coisas no terminal python, mas qualquer coisa impressa pelo filho ainda é impressa na minha sessão do terminal python.
Quando eu sair do terminal (comexit
ouCTRL+D), o comando exit trava. Se eu acertarCTRL+C durante esse travamento, o processo filho é encerrado.
Se eu matar o processo do terminal python manualmente (via posixkill
comando), o processo filho fica órfão e continua sendo executado com sua saída presumivelmente descartada.
Se eu executar esse código compython -c
, aguarda a criança terminar eCTRL+C mata pai e filho.
Quais configurações de execução do python matam crianças quando os pais são finalizados? Em particular, se um servidor web python-mod_wsgi-apache gera processos filho e é reiniciado, os filhos são mortos?
[Como um aparte, qual é a maneira correta de desanexar os processos filhos gerados no terminal? Existe uma maneira mais elegante que a seguinte:Deliberadamente criar um processo órfão em python ]
Atualizar: subprocessos python gerados commultiprocessing.Process
por um servidor web rodando sob apache sãonão morto quando o apache é reiniciado.