J'essaie d'améliorer les performances d'un script en utilisant ThreadPoolExecutor de concurrent.futures. Je lance des scripts python externes via Popen et les encapsule en tant qu'objets futurs, mais ces objets entrent dans la fonction de rappel comme terminée, mais je peux les voir fonctionner sur ma machine (ils fonctionnent pendant quelques minutes). Le code ressemble à ceci:concurrent.futures ThreadPoolExecutor n'attend pas?
with futures.ThreadPoolExecutor(max_workers=4) as executor:
p1 = executor.submit(subprocess.Popen([myotherPythonscript1], stdout = subprocess.PIPE))
p1.add_done_callback(process_result)
p2 = executor.submit(subprocess.Popen([myotherPythonscript2], stdout = subprocess.PIPE))
p2.add_done_callback(process_result)
def process_result(future):
logger.info("Seeding process finished...")
J'ai aussi essayé différentes approches en cours d'exécution avec() et attendre() futures fonctions, mais avec les mêmes résultats. Les objets futurs sont marqués comme déjà fait, mais en fait ils sont toujours en cours d'exécution. Ai-je raté quelque chose?
Merci,
Il résolu en partie mon problème. J'ai dû inclure un sous-programme check_pid pour que tous mes threads fonctionnent en même temps, car avec la fonction de communication(), Popen attendait la fin du processus. Je vous remercie! – fernandinand