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

然后我发现了全球解释器锁。我想问,在我丢弃python的脚本并将其重写的其他内容重写之前,是否有任何方法可以在Python中进行实际工作多线程?

有帮助吗?

解决方案

另一种方法是放弃线程,而是使用 多处理 模块(Python 2.6+),绕GIL绕,并且具有至少与螺纹模块中的API相似。

其他提示

现在,这是一个有趣的问题 - 我认为直接Cpython中没有逃脱的吉尔。

无吃的python 应该通过使用它的使用 微读, ,但我不认为这逃脱了吉尔。

另外,根据 python.org上的吉尔页, ,Jython和Ironpython没有GIL。

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

通常使用本机代码来完成CPU结合(和阻塞IO结合)任务,例如压缩和图像渲染,而本机库通常在工作时释放GIL,这允许并发。当您可以将CPU密集型工作隔离到一个狭窄的本机呼叫时,您会得到并发,本地性能在计数的地方以及在Python中编写大部分代码的便利性。

并非所有代码都具有可以在本机库中整洁实现的那些小的,可分离的计算代码块,但是很多事情都可以。

根据我所知,在Cpython(C中的Python实施)中,不。 (如果我错了,请纠正我,我肯定想知道是否存在解决方案!)。

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

你可以尝试 多处理 模块,如果适用于您的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top