Python或串行处理中的多线程?

时间:2015-11-03 15:49:46

标签: python c++ multithreading

在书中"多线程视觉效果"我读了以下几行:

  

在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
...    
}

那究竟是什么意思?我们不能开始多个口译吗?

1 个答案:

答案 0 :(得分:0)

  

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

     

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

这句话是真的吗?这取决于你正在使用哪个python解释器。

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

如果要在Cpython中编写并行程序,则应使用multiprocessing。其接口与threading模块相同。

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