如何使线程相互等待



好吧,所以我试图在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()

我需要t1t2先结束,然后t3t4应该开始。t2在这里是一个守护进程,因为我希望它在t1完成后立即结束。事先忘了提。我对线程完全陌生,所以如果这真的是错误的,请原谅我。

为此使用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()

有两种方法可以解决您的问题:

  • 使用.join方法。(有效且干净(
  • 使用函数(不如.join有效(
  1. 使用.join函数:请参阅此答案
  2. 使用功能:
    • 基本思想是对一个函数进行线程处理,然后只调用另一个函数
    • 如果你想运行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()

最新更新