线程和Python的全局解释器锁没有性能问题。可扩展性?

时间:2016-08-26 00:55:42

标签: python multithreading gil

我在使用Python的全局解释器锁时遇到了性能问题。我必须做一些线程安全的事情 - 尽管有共同的建议,GIL并不能自动保证线程安全 - 但是我有一个程序通常运行超过10个线程,其中所有线程都可以在任何时候都要活跃,包括在一起。这是一个有点复杂的异步消息传递系统。

我理解多处理,甚至在这个程序中使用Celery,但解决方案必须非常复杂才能完成此问题集的多处理。

我正在运行2.7并使用递归锁,尽管它们会受到性能损失。

我的问题是:我是否会遇到GIL的扩展问题?到目前为止,我没有看到它的性能问题。衡量这是......有问题的。是否有许多线程或类似的东西,你打它,它只是开始窒息? GIL性能与在单核CPU上执行多线程代码有很大不同吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

GIL是一个复杂的主题,如果没有您的代码,您的案例中的确切行为很难解释。所以我不能告诉你,如果你将来遇到麻烦。我可以建议你把项目带到最新版本的Python 3,如果可能的话。在Python 3中对GIL进行了许多改进。

这就像Python将破坏的神奇数量的线程。一般规则就是:线程越多,问题就越多。最复杂的是从一到二。

在某些情况下会释放GIL,尤其是在执行C代码或完成I / O时。这允许代码并行运行。使用现代CPU的高级功能将代码限制为仅一个CPU是不明智的。