在cPython(默认的Python实现)中,线程切换的频率是多少?这不是关于使用多核的问题;我知道GIL,并意识到只有一个线程会在时间运行。
我已经看到一些情况,我按顺序有两条日志消息,第一条日志消息将被发出,但第二条消息不会发出几秒钟。这可能是因为Python决定在两个日志语句之间切换线程。这让我相信Python每隔几秒就会在线程之间切换一次,这比我预期的要慢得多。这是对的吗?
答案 0 :(得分:7)
默认情况下,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个多月。)
答案 1 :(得分:0)
从Python 3.2开始,可以使用sys.setswitchinterval
:https://docs.python.org/3.6/library/sys.html#sys.setswitchinterval
在早期版本中,解释器默认每100条虚拟指令检查一次诸如线程切换和信号处理程序之类的周期性事件。可以通过sys.setcheckinterval
进行修改:https://docs.python.org/2/library/sys.html#sys.setcheckinterval