Python中的多线程还是串行处理?

3
在《视觉效果的多线程》一书中,我读到以下内容:
“在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 - Eamonn McEvoy
嗯,我的理解是,这只适用于两个进程想要与一个Python解释器进行交互的情况,对吗? - user1767754
1个回答

0
任何在Python中运行的程序都是唯一在Python中运行的,这意味着如果你的执行回调都是用Python实现的,那么你将失去多线程系统带来的许多效率优势。
Python解释器不是线程安全的-它不能同时从多个线程运行。需要使用Python的线程必须等待其轮到使用解释器。
这个说法是真的吗?这取决于你使用哪个Python解释器。
使用Cpython:由于全局解释锁(GIL),只有一个线程可以同时运行。因此,在Cpython中使用多个线程无法获得性能优势。甚至,当在Cpython中使用多个线程时,你的程序也会变慢。
如果想在Cpython中编写并行程序,应该使用 multiprocessing。它的接口与 threading模块相同。
或者,你可以在Jython、Ironthon中使用多线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接