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个单元?
发布于 2018-06-19 09:28:30
您在主线程中调用函数并将它们的返回值作为线程入口点传递(因为它们都返回None
,这意味着无操作入口点),您实际上并没有在单独的线程中运行它们。您还调用了someMethod
两次,但从未调用过someMethod2
。要进行修复,请更改为:
t1 = threading.Thread(name="t1", target=someMethod, args=(1,))
t2 = threading.Thread(name="t2", target=someMethod2, args=(2,))
它正确地传递对函数本身的引用作为入口点,使用要使用的参数,直到线程实际启动时才执行。
https://stackoverflow.com/questions/50919440
复制相似问题