【问题标题】:Multithreading in Python or Serial Processing?Python 中的多线程还是串行处理?
【发布时间】:2015-11-03 15:49:45
【问题描述】:

在“视觉效果的多线程”一书中,我读到了以下几行:

任何在 Python 中运行的东西都是唯一在 Python 中运行的东西,这意味着如果您的执行回调全部在 Python 中实现,您将失去多线程系统的大部分效率收益。

Python 解释器不是线程安全的——它不能同时在多个线程中运行。需要使用 Python 的线程必须等待轮到它使用解释器。

为什么这个说法是正确的?

这与想法有关,即代码是在 C++ 中执行的。

static void MyCallback(const Context &context){
Auto<Lock> lock(GetMyMutexFromContext(context));
...
EvalMyPythonString(str); //A function that takes the GIL
...    
}

那么究竟是什么意思呢?我们不能启动多个解释器吗?

【问题讨论】:

标签: python c++ multithreading


【解决方案1】:

任何在 Python 中运行的东西都是唯一在 Python 中运行的东西,这意味着如果您的执行回调全部在 Python 中实现,您将失去多线程系统的大部分效率收益。

Python 解释器不是线程安全的——它不能同时在多个线程中运行。需要使用 Python 的线程必须等待轮到它使用解释器。

这个说法是真的吗?这取决于您使用的 Python 解释器。

使用 Cpython: 由于 Global Interpreter Lock (GIL),只能同时运行一个线程。所以你不能利用使用多线程的性能优势。甚至,在 Cpython 中使用多个线程时,您的程序会变慢。

如果你想用 Cpython 编写并行程序,你应该使用multiprocessing。其接口与threading模块相同。

或者,您可以在 Jython、Ironthon 中使用多线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2020-11-25
    • 2013-04-03
    • 2021-02-11
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多