在书中"多线程视觉效果"我读了以下几行:
在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
...
}
那究竟是什么意思?我们不能开始多个口译吗?
答案 0 :(得分:0)
在Python中运行的任何东西都是在Python中运行的唯一东西,这意味着如果您的执行回调都是用Python实现的,那么您将失去多线程系统的大部分效率。
Python解释器不是线程安全的 - 它不能同时运行多个线程。需要使用Python的线程必须等待轮到使用解释器。
这句话是真的吗?这取决于你正在使用哪个python解释器。
使用Cpython:由于Global Interpreter Lock(GIL),只有一个线程可以同时运行。因此,您无法利用使用多线程的性能优势。甚至,在Cpython中使用多个线程时,程序会变慢。
如果要在Cpython中编写并行程序,则应使用multiprocessing。其接口与threading模块相同。
或者,您可以在Jython,Ironthon中使用多个线程。