2010-09-09 6 views
1

J'ai python2.5 et multiprocessoring (obtenir de http://code.google.com/p/python-multiprocessing/)python2.5 multitraitement Piscine

Ce code simple (obtenir de docs), fonctionne très étrange de temps en temps, parfois ok, mais parfois il jette délai d'attente ex ou accrocher mon Windows (Vista), seulement réinitialiser aide :) Pourquoi cela peut-il arriver?

from multiprocessing import Pool 

def f(x): 
    print "fc",x 
    return x*x 
pool = Pool(processes=4) 
if __name__ == '__main__': 
    result = pool.apply_async(f, (10,))  # evaluate "f(10)" asynchronously 
    print result.get(timeout=3)   # prints "100" unless your computer is *very* slow 

Répondre

4

Ceci est juste une conjecture sauvage, mais avez-vous essayé de déplacer la création Pool dans le bloc if? Je soupçonne que sinon il pourrait engendrer un nombre illimité de nouveaux processus, provoquant le gel.

+1

J'avais peur de recommencer :) mais ça marche! thanx) vraiment tirer créait encore et encore et cela se bloque. – Evg

+0

@nikow: Pourquoi les processus seraient engendrés indéfiniment? Je peux voir les 4 enfants initiaux chacun créer un nouveau groupe de 4 enfants lors de l'importation du programme, mais je ne vois pas comment ils exécuteraient le code principal et appeler 'f' pour chacun de leurs enfants ... – EOL

+0

@EOL: Je suspecte que dans chaque enfant le code du module est exécuté. Chaque fois qu'un nouveau pool est créé, engendrer 4 nouveaux enfants. Cela s'est produit sur ma machine et j'ai vu un très grand nombre de processus Python avant que la machine ne gèle. – nikow