Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3.7.3-concurent.futures等待故障_Python_Python 3.x_Concurrent.futures - Fatal编程技术网

Python3.7.3-concurent.futures等待故障

Python3.7.3-concurent.futures等待故障,python,python-3.x,concurrent.futures,Python,Python 3.x,Concurrent.futures,我是python多线程(更准确地说是ThreadPoolExecutor)的初学者,我在这里向您询问这方面的问题。我目前正在使用concurrent.futures模块,我一直在等待事件。我的程序会检查等待事件,并在不打印返回的每个函数的最终值的情况下完成执行。有人能解释一下为什么吗?:) 如前所述,任务1正在等待任务2的未来结果,而任务2正在等待任务1的未来结果。这是一个典型的例子 查看Future.result()的文档(重点是我的): 如果未指定超时或无超时,则等待时间没有限制 这意味着两

我是python多线程(更准确地说是ThreadPoolExecutor)的初学者,我在这里向您询问这方面的问题。我目前正在使用concurrent.futures模块,我一直在等待事件。我的程序会检查等待事件,并在不打印返回的每个函数的最终值的情况下完成执行。有人能解释一下为什么吗?:)


如前所述,任务1正在等待任务2的未来结果,而任务2正在等待任务1的未来结果。这是一个典型的例子

查看
Future.result()
的文档(重点是我的):

如果未指定超时或无超时,则等待时间没有限制


这意味着两个未来的将继续彼此等待。这意味着不会打印任何内容,并且该过程永远不会完成。:-)

function_AB
中,您正在等待通过在不同线程中运行
function_AB
创建的未来结果。这是故意的吗?如果我正确阅读了文档,那就永远不会结束。事实上,我有点惊讶它没有爆炸……不,不是的,我只是在测试一些东西,以便更好地理解result()是如何工作的。问题是如果我尝试使用“”def function_AB():print(“execution A_B”)time.sleep(10)resultat_cd=Task_2.result()print(type(resultat_cd))print(“blabla”)返回结果\u ab''结果是相同的,它没有按照我的意愿显示或打印其余的代码,如“finish C\u D”,我不知道为什么。感谢您的回答,因此当我更改超时时出现异常,“name'Task_2'未定义”,那么,是可以等待来自另一个线程的程序执行,还是只能等待main()函数的结果呢?这些示例线程所做的工作很少。可能是任务1在创建任务2之前已在运行,导致上述错误。这表明在另一个
未来
内部等待一个
未来
很容易导致不同类型的问题。如果查看
concurrent.futures.Executor
的设计,等待
Future
的结果通常在主线程或进程中完成。
#!/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))