Quiero ejecutar tres comandos al mismo tiempo desde python. El formato del comando es query.pl -args

Actualmente estoy haciendo

os.system("query.pl -results '10000' -serverName 'server1' >> log1.txt")

os.system("query.pl -results '10000' -serverName 'server2' >> log2.txt")

os.system("query.pl -results '10000' -serverName 'server3' >> log3.txt")

Quiero consultar los tres servidores al mismo tiempo, pero en este caso, cada comando se ejecuta solo después de que el último haya terminado. ¿Cómo puedo hacerlos simultáneos? Estaba pensando en usar '&' al final, pero quiero que la siguiente parte del código se ejecute solo cuando los tres comandos terminen

3
randomThought 28 oct. 2009 a las 23:28

3 respuestas

La mejor respuesta

Puede usar el subproceso y hacer que los tres se ejecuten de forma independiente: use subprocess.Popen. Tenga cuidado al configurar el parámetro "shell" correctamente.

Use el método wait () o poll () para determinar cuándo finalizan los subprocesos.

10
jldupont 28 oct. 2009 a las 20:35

Puede usar Cola

tasks = ("query.pl -results '10000' -serverName 'server1'",\
"query.pl -results '10000' -serverName 'server2'",\
"query.pl -results '10000' -serverName 'server1'")

def worker():
    while True:
        item = q.get()
        os.system(item)

q = Queue()
for i in tasks:
     t = Thread(target=worker)
     t.setDaemon(True)
     t.start()

for item in tasks:
    q.put(item)

q.join()   
0
Oduvan 28 oct. 2009 a las 20:41
os.system("query.pl -results '10000' -serverName 'server1' &") 
os.system("query.pl -results '10000' -serverName 'server2' &") 
os.system("query.pl -results '10000' -serverName 'server3' &")

En este caso, el proceso se iniciará en segundo plano

0
Oduvan 28 oct. 2009 a las 20:36