Quieropython: enfoque simple para matar niños o reportar su éxito?
- comandos shell llamada (por ejemplo 'sueño' a continuación) en paralelo,
- informe sobre sus inicios y terminaciones individuales y
- ser capaz de matarlos con 'kill -9 parent_process_pid '.
Ya hay mucho escrito sobre este tipo de cosas, pero siento que aún no he encontrado la elegante solución pitonica que estoy buscando. También estoy tratando de mantener las cosas relativamente legibles (y cortas) para alguien que no esté familiarizado con Python.
Mi enfoque hasta ahora (ver código de abajo) ha sido:
- puesto subprocess.call (mandato_unix) en una función contenedora que informa del inicio y finalización del comando.
- llama a la función de envoltura con multiproceso.Proceso.
- rastrear los pids apropiados, almacenarlos globalmente, y matarlos en el signal_handler.
Estaba tratando de evitar una solución que periódicamente encuesta los procesos, pero no estoy seguro de por qué.
¿Hay un mejor enfoque?
import subprocess,multiprocessing,signal
import sys,os,time
def sigterm_handler(signal, frame):
print 'You killed me!'
for p in pids:
os.kill(p,9)
sys.exit(0)
def sigint_handler(signal, frame):
print 'You pressed Ctrl+C!'
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGTERM, sigterm_handler)
def f_wrapper(d):
print str(d) + " start"
p=subprocess.call(["sleep","100"])
pids.append(p.pid)
print str(d) + " done"
print "Starting to run things."
pids=[]
for i in range(5):
p=multiprocessing.Process(target=f_wrapper,args=(i,))
p.daemon=True
p.start()
print "Got things running ..."
while pids:
print "Still working ..."
time.sleep(1)
+1 por un título llamativo. –
No sabía que Python era capaz de matar niños ... –
@ Zonda333: Oh, claro. 'desde __future__ import murder '. –