python 3.7.3 - concurent.futures 麻烦等等
python 3.7.3 - concurent.futures wait trouble
我是 python 多线程的初学者,更准确地说是 ThreadPoolExecutor,我来这里是想问问你。我目前正在使用 concurrent.futures 模块,但我一直在等待事件。我的程序遍历等待事件并完成执行,而不打印返回的每个函数的最终值。有人可以解释我为什么吗? :)
#!/usr/bin/env python
# module principal utilise concurent.futures pour executer 2 tacheds en parallele
from concurrent.futures import ThreadPoolExecutor
import shutil
import time
import threading
def function_AB():
print("execution A_B")
time.sleep(10)
result_ab = "finish A_B"
resultat_cd = Task_2.result(None)
print(resultat_cd)
return result_ab
def function_CD():
print("execution C_D")
time.sleep(3)
result_cd = "finish C_D"
resultat_ab = Task_1.result()
print(resultat_ab)
return result_cd
def main():
executor = ThreadPoolExecutor(max_workers=2)
#submit = ne ferme pas explictement le pool comparer au with ThreadPoolExecutor() /
# appel non bloquant programme principal traite l'impression de la déclaration immédiatement et se bloque jusqu'à ce que tous les threads aient terminé
Task_1 = executor.submit(function_AB)
Task_2 = executor.submit(function_CD)
print(Task_1)
print(Task_2)
#permet de bloquer les threads jusqu'à la fin de leur exécution
executor.shutdown(wait=True)
if __name__ == "__main__":
start = time.time()
main()
print("Temps execution : {}".format(time.time() - start))
正如所写,任务 1 正在等待任务 2 的 Future
结果,而任务 2 正在等待任务 1 的 Future
结果。这是典型的deadlock.
查看 Future.result()
的文档(强调我的):
If timeout is not specified or None, there is no limit to the wait time.
这意味着 Future
双方将继续等待对方。这意味着不会打印任何内容,并且该过程 永远不会 完成。 :-)
我是 python 多线程的初学者,更准确地说是 ThreadPoolExecutor,我来这里是想问问你。我目前正在使用 concurrent.futures 模块,但我一直在等待事件。我的程序遍历等待事件并完成执行,而不打印返回的每个函数的最终值。有人可以解释我为什么吗? :)
#!/usr/bin/env python
# module principal utilise concurent.futures pour executer 2 tacheds en parallele
from concurrent.futures import ThreadPoolExecutor
import shutil
import time
import threading
def function_AB():
print("execution A_B")
time.sleep(10)
result_ab = "finish A_B"
resultat_cd = Task_2.result(None)
print(resultat_cd)
return result_ab
def function_CD():
print("execution C_D")
time.sleep(3)
result_cd = "finish C_D"
resultat_ab = Task_1.result()
print(resultat_ab)
return result_cd
def main():
executor = ThreadPoolExecutor(max_workers=2)
#submit = ne ferme pas explictement le pool comparer au with ThreadPoolExecutor() /
# appel non bloquant programme principal traite l'impression de la déclaration immédiatement et se bloque jusqu'à ce que tous les threads aient terminé
Task_1 = executor.submit(function_AB)
Task_2 = executor.submit(function_CD)
print(Task_1)
print(Task_2)
#permet de bloquer les threads jusqu'à la fin de leur exécution
executor.shutdown(wait=True)
if __name__ == "__main__":
start = time.time()
main()
print("Temps execution : {}".format(time.time() - start))
正如所写,任务 1 正在等待任务 2 的 Future
结果,而任务 2 正在等待任务 1 的 Future
结果。这是典型的deadlock.
查看 Future.result()
的文档(强调我的):
If timeout is not specified or None, there is no limit to the wait time.
这意味着 Future
双方将继续等待对方。这意味着不会打印任何内容,并且该过程 永远不会 完成。 :-)