你如何让线程互相等待
python 296
原文标题 :how do you make threads wait for eachother
好的,所以我正在尝试在 python 中进行速度测试,我遇到的唯一问题是我无法弄清楚如何在启动上传速度线程之前完成下载速度线程。我可以提供一些我的代码:
t1 = Thread(target= dload)
t2 = Thread(target= testo)
t3 = Thread(target= uload)
t4 = Thread(target= testo2)
t2.daemon=True
t4.daemon=True
t1.start()
t2.start()
t3.start()
t4.start()
我需要t1
和t2
首先结束,然后t3
和t4
应该开始。t2
在这里是一个守护进程,因为我希望它在t1
完成后立即结束。忘了事先提一下。我对线程完全陌生,所以如果这真的错了,请原谅我。
回复
我来回复-
wackazong 评论
为此,您使用
join
。注意t2.daemon=True
表示您期望t2
在脚本运行时不会结束。这与您希望等待 t2 结束的规范相反。t1 = Thread(target= dload) t2 = Thread(target= testo) t3 = Thread(target= uload) t4 = Thread(target= testo2) # t2.daemon=True t4.daemon=True t1.start() t2.start() # wait for t1 and t2 to end t1.join() t2.join() t3.start() t4.start()
2年前 -
Faraaz Kurawle 评论
有两种方法可以解决您的问题:
- 使用 .join 方法。 (
有效和清洁
) - 使用函数 (
不如 .join 有效)
- 使用 .join 功能:请参阅此答案。
- 使用功能:
- 基本思想是线程化一个函数并调用另一个函数。
- 如果你想运行 testo 直到 t1 结束,那么你可以观察一个变量并运行里面的 while 循环。例如:
while t1_ends==False: # Change this value to true in t1 fucntion at the end of it. testo()
t1 = Thread(target= dload) t2 = Thread(target= testo) t3 = Thread(target= uload) t4 = Thread(target= testo2) t4.daemon=True def a(): t1.start() testo() def b(): t3.start() t4.start() a() b()
2年前 - 使用 .join 方法。 (