在python中是否存在工作线程这样的事情?

时间:2010-12-07 20:20:48

标签: python multithreading python-stackless

我编写了一个漂亮的多线程脚本,当我运行它时,它使用25个线程比直接调用线程处理程序更糟糕。

然后我发现了全局解释器锁。我想问一下,在我丢弃这个脚本的python并重写其他内容之前,有没有办法在python中进行实际的多线程处理?

5 个答案:

答案 0 :(得分:9)

另一种方法是放弃线程,而是使用Multiprocessing模块(Python 2.6+),它绕过GIL,并且有一个至少类似于线程模块中的API。

答案 1 :(得分:3)

现在这是一个有趣的问题 - 我认为直接CPython中没有逃避GIL。

Stackless Python应该通过使用microthreads来改善CPython的“并发”性能,但我不认为它逃脱了GIL。

此外,根据GIL page on python.org,Jython和IronPython没有GIL。

答案 2 :(得分:1)

正确答案很大程度上取决于你正在做什么。

严重受CPU限制(以及阻止IO绑定)任务(如压缩和图像呈现)通常使用本机代码完成,本机库通常在它们工作时释放GIL,这允许并发。当您可以将CPU密集型工作隔离到一个狭窄的本机调用时,您将获得并发性,本机性能,以及在Python中编写大部分代码的便利性。

并非所有代码都具有可以在本机库中巧妙地实现的那些小的,可隔离的计算代码块,但是很多代码都是如此。

答案 3 :(得分:0)

在CPython(用C语言实现Python)中,根据我的知识,没有。 (如果我错了,请纠正我,我肯定想知道是否存在解决方案!)。

您可能希望对IronPython(.NET)或JPython(Java / JWM)感兴趣。我没有使用它们,但我相信其中至少有一个支持给定执行环境的原生线程。

答案 4 :(得分:0)

您可以尝试使用multiprocessing模块,如果它适用于您的问题。