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的等待问题的主要内容,如果未能解决你的问题,请参考以下文章

add iis concurency times

(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解

centos7安装python3.7.3

linux安装python3

python3.7.3使用pip安装mysqldb报错,3.7.3后改为pymysql

使用 python 3.7.3 发送带附件的电子邮件