Python线程。为什么线程互相阻塞?

时间:2018-06-19 01:25:19

标签: python

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个单位?

1 个答案:

答案 0 :(得分:7)

你在主线程中调用了函数并将它们的返回值作为线程入口点传递(因为它们都返回None,这意味着没有-op入口点),你实际上没有在单独的线程中运行它们。您还调用了someMethod两次,从未调用someMethod2。要修复,请更改为:

t1 = threading.Thread(name="t1", target=someMethod, args=(1,))
t2 = threading.Thread(name="t2", target=someMethod2, args=(2,))

正确地将对函数本身的引用作为入口点传递,并使用要使用的参数,将执行推迟到线程实际启动。