2009-07-19 36 views
0

J'ai besoin de lancer plusieurs jobs distants chacun à un moment précis en utilisant des threads et SSH. Donc j'écris:Threads, subprocess & zombies

def dojob(hostname): 

    command = "echo Done" 
    p = Popen(['ssh','%[email protected]%s' % (user, hostname), command], stdout=PIPE, shell=False) 
    output = p.communicate()[0].strip() 
    print output 

[...] 

fire_starter = [Timer(t, dojob, [y]) for t,y in zip(instant, hosts)] 

for e in fire_starter: 
    e.start() 

Le code fonctionne, mais il inonde mon OS avec Zombies. Honnêtement, je croyais que la méthode de communication() prend soin du processus enfant, en attendant qu'il se termine. Où ai-je tort?

Répondre

1

Il semblerait que vous ayez rencontré this issue en rapport avec pipes/ssh et popen(). Il y a une analyse et une résolution here.