Je veux un processus de longue durée pour retourner sa progression sur une file d'attente (ou quelque chose de similaire) que je vais alimenter dans une boîte de dialogue de progression. J'ai aussi besoin du résultat lorsque le processus est terminé. Un exemple de test échoue ici avec un RuntimeError: Queue objects should only be shared between processes through inheritance
.Comment passez-vous une référence de file d'attente à une fonction gérée par pool.map_async()?
import multiprocessing, time
def task(args):
count = args[0]
queue = args[1]
for i in xrange(count):
queue.put("%d mississippi" % i)
return "Done"
def main():
q = multiprocessing.Queue()
pool = multiprocessing.Pool()
result = pool.map_async(task, [(x, q) for x in range(10)])
time.sleep(1)
while not q.empty():
print q.get()
print result.get()
if __name__ == "__main__":
main()
Je suis en mesure d'obtenir ce travail en utilisant des objets individuels de processus (où je suis alowed pour passer une référence file d'attente), mais je n'ai pas une piscine pour gérer les nombreux processus que je veux lancer. Des conseils sur un meilleur modèle pour cela?
Ce n'est pas une réponse à votre question, mais essayez la bibliothèque 'execnet' pour les mappages multi-processus. Le 'multiprocessing 'intégré a encore quelques problèmes à résoudre (voir le tracker Python). De plus, son code source est assez grand et compliqué. La bibliothèque 'execnet' me semble beaucoup mieux que' multiprocessing'. –