关于Python和GIL关注David Beazley's paper,将基于Windows的多核系统中的Python程序(带有GIL和CP的CPython)限制为单个CPU会是一个好习惯吗?
会提升表现吗?
UPDATE:假设使用了多个线程(不确定它是否有所作为)
答案 0 :(得分:4)
本文确实暗示将程序限制为单个核心可以提高在该特定情况下的性能。但是,您需要处理许多问题:
总而言之,只有当您运行以下操作时,您希望通过强制操作系统将程序限制为单个核心来使您的生活变得复杂:
在多核机器上编程。
答案 1 :(得分:0)
偏见:对于涉及大量CPU处理的并行计算,我非常喜欢 更喜欢消息传递和协作进程来进行线程编程 (当然,这取决于问题)
您不应将程序限制为一个核心。 Beazley只是演示了一个特定的问题,在那些不完整的条件下表现不佳(这些条件是IO绑定线程和CPU绑定线程相互竞争)。理想情况下,您希望通过使用其他方法(import multiprocessing
)来避免这些情况。
我认为最好的解决方案是使用多处理模块将CPU绑定任务放在其他进程中,以便它们利用自己的内核,并在线程中使用IO绑定任务(或微线程/协同程序,如果您阅读他的有趣论文:http://www.dabeaz.com/coroutines/)因为GIL最适合这些类型的任务。
结论:Python线程最适合IO绑定任务,非CPU绑定。