Python – comandos paralelos

¿Cómo ejecuto varios comandos de python en paralelo en un script de python? Como ejemplo simple tengo varios comandos de suspensión:

time.sleep(4) time.sleep(6) time.sleep(8) 

Quiero que todo lo anterior se ejecute en paralelo. Espero que el control vuelva cuando hayan transcurrido 8 segundos (que es el máximo de todos los tiempos de espera anteriores). Los comandos reales serán diferentes pero queremos tener una idea con lo anterior.

En bash, podría haber hecho simple:

 sleep 4 & pid1=$! sleep 6 & pid2=$! sleep 8 & pid3=$! wait $pid1 $pid2 $pid3 

Gracias.

Un ejemplo simple, utilizando multiprocesamiento:

 import multiprocessing as mp import time pool = mp.Pool(3) results = pool.map(time.sleep, [4, 6, 8] ) 

Esto genera procesos separados en lugar de crear subprocesos separados en el mismo proceso que se demostró en la respuesta de Steven Rumbalski. el multiprocesamiento evita el GIL (en cpython) lo que significa que puede ejecutar el código de Python simultáneamente (lo que no se puede hacer en cpython con subprocesamiento). Sin embargo, tiene la desventaja de que la información que usted envía a los otros procesos debe poder ser recolectada, y el estado de intercambio entre procesos también es un poco más complicado (aunque podría estar equivocado en el último punto, nunca he usado realmente threading ).

advertencia: no intente esto en el intérprete interactivo

Eche un vistazo al módulo de enhebrado . Podrías tener algo como:

 import time,threading def mySleep( sec ): time.sleep( sec ) t1 = threading.Thread( target=mySleep, args=(4,) ) t2 = threading.Thread( target=mySleep, args=(6,) ) t3 = threading.Thread( target=mySleep, args=(8,) ) t1.start() t2.start() t3.start() # All threads running in parallel, now we wait t1.join() t2.join() t3.join() 
 from threading import Thread threads = [Thread(target=time.sleep, args=(secs,)) for secs in (4,6,8)] for t in threads: t.start() for t in threads: t.join() print 'all threads done!'