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

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

最佳答案

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

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

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

关于Python线程。为什么线程会互相阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50919440/

相关文章:

python - Scikit Learn中的多变量/多元线性回归?

python - 我可以在 Google App Engine 中使用 Java 科学库吗?

python - 如何在 CircleCI 2.0 中显式添加项目到 Python 路径?

python - pydev 与 unicode 的奇怪行为

python - 在 Python 3 中加载 Python 2 .npy 文件

python - 040和40的区别

python - 如何避免 python 中的 StopIteration 错误

python - 使用 in1d 函数测试数组之间的相等性

python - 你如何从 Python 调试 win32 com 集成?

python - 如何从 Tweepy 获取正确的日期和时间?