Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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
Python 当其他任务完成时启动线程_Python_Multithreading - Fatal编程技术网

Python 当其他任务完成时启动线程

Python 当其他任务完成时启动线程,python,multithreading,Python,Multithreading,是否有任何条件表明线程已完成?在某些情况下,我只需要在另一个线程完成时启动一个线程。只需使用线程的join方法等待它完成。然后开始下一个线程 from threading import Thread Thread(target=do_something1).start() Thread(target=do_something2).start() python 3.2+中还有一个新的(ish)特性,名为。它们允许您在其他线程(或进程)中执行函数并管理执行,而无需求助于线程等低级实体。下面是一个例

是否有任何条件表明线程已完成?在某些情况下,我只需要在另一个线程完成时启动一个线程。

只需使用线程的
join
方法等待它完成。然后开始下一个线程

from threading import Thread
Thread(target=do_something1).start()
Thread(target=do_something2).start()
python 3.2+中还有一个新的(ish)特性,名为。它们允许您在其他线程(或进程)中执行函数并管理执行,而无需求助于线程等低级实体。下面是一个例子

from threading import Thread
from time import sleep

def do_something1():
    sleep(1)
    return 1

def do_something2():
    sleep(1)
    return 2

t1 = Thread(target=do_something1)
t1.start()
print("wait for 1")
t1.join()
print("done 1")

t2 = Thread(target=do_something2)
t2.start()
print("wait for 2")
t2.join()
print("done 2")

你需要加入线程,加入意味着等待它完成。查看文档并查看join方法。还有一个更高级别的模块,它允许您避免使用诸如线程之类的低级别组件。
from concurrent.futures import ThreadPoolExecutor

print("use futures")
funcs = [do_something1, do_something2]
with ThreadPoolExecutor(max_workers=1) as e:

    for fn in funcs:
        ftr = e.submit(fn)
        print("submit")
        print(ftr.result())
        print("done")