在此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
全部同时打印
请您参考如下方法:
From the documentation , target 应该是可调用的:
target is the callable object to be invoked by the run() method
您没有将函数传递给 target,您传递的是函数的返回值,因此函数会在您将其传递给 threading.Thread 时立即运行,而不是在您调用 t.start() 时。
您应该使用 args 参数来为您的可调用对象指定参数。
只需更改这一行:
t = threading.Thread(target=whatever(i))
到
t = threading.Thread(target=whatever, args=(i,))
