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 双方将继续等待对方。这意味着不会打印任何内容,并且该过程 永远不会 完成。 :-)