2015-10-19 78 views
1

在cPython(默认的Python实现)中,线程切换发生的频率如何?这不是关于使用多核的问题;我知道GIL,并意识到只有一个线程将在同一时间运行。Python切换线程的频率如何?

我已经看到了几个情况,我有两个日志消息的顺序,第一个日志消息将被发射,但第二个不发射几秒钟。这可能是因为Python决定在两个日志语句之间切换线程。这让我相信Python每隔几秒就会在线程之间切换一次,这比我预期的要慢得多。它是否正确?

+2

或您的日志消息卡在I/O缓冲区中。当登录多线程环境时,在'写入'之后'刷新'日志可能是一个好习惯。 –

+2

用于线程切换,请查看和'打勾'的概念 –

+0

另请参见['sys.setcheckinterval'](https:// docs。 python.org/2/library/sys.html#sys.setcheckinterval) –

回答

4

默认情况下,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个多月的时间了。)