你如何让线程互相等待

青葱年少 python 196

原文标题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()

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

原文链接:https://stackoverflow.com//questions/71555397/how-do-you-make-threads-wait-for-eachother

回复

我来回复
  • wackazong的头像
    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年前 0条评论
  • Faraaz Kurawle的头像
    Faraaz Kurawle 评论

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

    • 使用 .join 方法。 (
      有效和清洁
      )
    • 使用函数 (
      不如 .join 有效)
    1. 使用 .join 功能:请参阅此答案。
    2. 使用功能:
    3. 基本思想是线程化一个函数并调用另一个函数。
    4. 如果你想运行 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年前 0条评论