2015-11-03 56 views
3

在这本书“多线程的视觉效果”,我读下面几行:Python或串行处理中的多线程?

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

那究竟是什么意思?我们能否启动多个口译员?

+2

阅读这篇文章:http://programmers.stackexchange.com/questions/186889/why-was-python-written-with-the-gil –

+0

嗯,我理解正确吗,这只适用于两个进程想要与一个python解释器进行交互吗? – user1767754

回答

0

凡是在Python运行在Python运行的唯一的事情,这意味着,如果你执行回调所有的Python实现的,你失去很多多线程系统的效率提高。

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

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

与Cpython:由于全局解释器锁定(GIL),只有一个线程可以同时运行。所以你不能使用多线程的性能优势。即使在Cpython中使用多线程时,你的程序也会变慢。

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

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