Python GIL和多线程

4
我希望将我的单线程应用程序分离成多个工作线程。只有一个问题 - 这样做的性能如何?如果GIL防止Python一次执行多个线程,那么我会得到任何好处吗?
另一个观点(从C / C ++角度)-据我所知,每个线程无论如何都只能被独占地执行,因此在Python解释器以下的较低级别上,我有相同的限制。
总结:Python线程在任务切换方面的效率是否比“本机”线程低?

你的线程在做什么?它们是否受限于CPU?你的任务是否计算密集型? - Sven Marnach
我想将一堆成本数学运算移动到另一个线程中。 - Alex G.P.
1个回答

6
不要担心GIL。根据程序所做的事情类型(计算 vs. I/O),性能特征会有所不同。如果程序是I/O绑定的,则您可能根本不会注意到GIL。
另一种方法是使用multiprocessing模块,其中每个进程在其自己的操作系统进程中运行,具有自己的Python运行时。使用此方法可以充分利用多个核心,并且通常更安全,因为您无需担心同步访问共享内存。

谢谢你提到多进程,我考虑过了,但在单个CPU上不会产生任何效果,我是对的吗? - Alex G.P.
很遗憾,这不是IO操作,而是大量的计算。 - Alex G.P.
7
如果你只有一个CPU可用,无论使用何种编程语言,线程和多进程都不会提高性能。这与Python和GIL无关。 - Sven Marnach

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