python 3.7.3 - concurent.futures的等待问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 3.7.3 - concurent.futures的等待问题相关的知识,希望对你有一定的参考价值。
我是一个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正在等待事件的结果。Future
的结果,而任务2则在等待任务2的结果。Future
为任务1。这是一个典型的 僵局.
请看文件中的 Future.result()
(强调是我的)。
如果没有指定超时或无。等待时间不受限制.
这意味着,这两个 Future
的会一直等待对方。这意味着没有任何东西会被打印出来,而这个过程将是 从来没有 结束。)
以上是关于python 3.7.3 - concurent.futures的等待问题的主要内容,如果未能解决你的问题,请参考以下文章
(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解