import threading
import time
def someMethod(x):
time.sleep(20)
print(x);
def someMethod2(x):
time.sleep(1)
print(x);
t1 = threading.Thread(name="t1", target=someMethod(1));
t2 = threading.Thread(name="t2", target=someMethod2(2));
t1.start();
t2.start();
我希望输出为2后跟1,但它是1后跟2.总时间是21秒。如何让它并行运行,输出为2后跟1,两个线程并行运行,总时间为20个单位?
答案 0 :(得分:7)
你在主线程中调用了函数并将它们的返回值作为线程入口点传递(因为它们都返回None
,这意味着没有-op入口点),你实际上没有在单独的线程中运行它们。您还调用了someMethod
两次,从未调用someMethod2
。要修复,请更改为:
t1 = threading.Thread(name="t1", target=someMethod, args=(1,))
t2 = threading.Thread(name="t2", target=someMethod2, args=(2,))
正确地将对函数本身的引用作为入口点传递,并使用要使用的参数,将执行推迟到线程实际启动。