代码之家  ›  专栏  ›  技术社区  ›  AhmedWas

如何不等待线程在python中完成

  •  1
  • AhmedWas  · 技术社区  · 6 年前

    在这个里面 question 他实际上问了我想要什么。但答案是去掉括号。但是,如果删除括号,那么就无法为函数传递参数。

    如何在不等待的情况下执行以下简单代码:

    from time import sleep
    import threading
    
    def whatever(i):
      sleep(5)
      print("Hey! It's me number " + str(i))
    
    for i in range(3):
      t = threading.Thread(target=whatever(i))
      t.start()
    

    期望输出为

    Hey! It's me number 0
    Hey! It's me number 1
    Hey! It's me number 2
    

    全部同时打印

    4 回复  |  直到 6 年前
        1
  •  3
  •   user3483203    6 年前

    From the documentation ,请 target

    你不能把你的功能传递给 ,您正在传递函数的返回值,因此函数在传递给 threading.Thread t.start()

    你应该使用 args

    只需更改此行:

     t = threading.Thread(target=whatever(i))
    

    t = threading.Thread(target=whatever, args=(i,))
    
        2
  •  2
  •   AntiMatterDynamite    6 年前

    你似乎没有意识到这行的作用: t = threading.Thread(target=whatever(i)) 开始

    target t = threading.Thread(target=whatever(1)) ,的 whatever 你已经在原来的线程中运行了,你需要 threading

    from time import sleep
    import threading
    
    def whatever(i):
      sleep(5)
      print("Hey! It's me number " + str(i))
    
    for i in range(3):
      t = threading.Thread(target=whatever, args=(i,))
      t.start()
    
        3
  •  1
  •   Olaf Górski    6 年前
    from time import sleep
    import threading
    
    def whatever(i):
      print("Hey! It's me number " + str(i))
    
    for i in range(3):
      t = threading.Thread(target=whatever, args=(i,))
      t.start()
    

    但是你必须考虑一件事。

        4
  •  1
  •   Cecile    6 年前

    把它包装成一个lambda。

    from time import sleep
    import threading
    
    def whatever(i):
      sleep(5)
      print("Hey! It's me number " + str(i))
    
    for i in range(3):
      t = threading.Thread(target=lambda: whatever(i))
      t.start()