在cPython(默认的Python实现)中,线程切换多久发生一次?这不是关于使用多个内核的问题。我了解GIL,并意识到一次只能运行一个线程。

我看到一些情况下,我依次有两个日志消息,第一个日志消息将被发出,但是第二个消息几秒钟不被发出。这可能是因为Python决定在两个日志语句之间切换线程。这使我相信Python每隔几秒钟就会在线程之间切换一次,这比我预期的要慢得多。这样对吗?

最佳答案

默认情况下,Python 2将每100条指令切换一次线程。可以使用此处记录的sys.setcheckinterval对其进行调整:https://docs.python.org/2/library/sys.html#sys.setcheckinterval

我在此演示文稿的第10、11和12页上找到了更多信息:http://www.dabeaz.com/python/UnderstandingGIL.pdf

(这些答案来自问题的评论,但由于没有人将其写下来,所以我自己动手做。评论发表至今已有6个多月。)

更新:

从Python 3.2开始,不推荐使用sys.setcheckinterval。 CPython有另一种改进GIL的方法。他们没有在100条虚拟指令后释放GIL,而是改为按时间间隔切换。

默认情况下,GIL将在5毫秒(5000微秒)后释放,以便其他线程可以进行更改以获取GIL。您可以使用sys.setswitchinterval更改此默认值

关于python - Python多久切换一次线程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33225086/

10-12 16:54
查看更多