【发布时间】:2015-10-19 22:35:40
【问题描述】:
在 cPython(默认 Python 实现)中,线程切换多久发生一次?这不是关于使用多核的问题;我了解 GIL,并意识到一次只会运行一个线程。
我见过一些情况,我依次有两条日志消息,第一条日志消息会发出,但第二条日志消息会在几秒钟内不发出。这可能是因为 Python 决定在两个日志语句之间切换线程。这让我相信 Python 每隔几秒钟就会在线程之间切换一次,这比我预期的要慢得多。这是正确的吗?
【问题讨论】:
-
或者您的日志消息卡在 I/O 缓冲区中。在多线程环境中登录时,在“写入”之后“刷新”日志可能是一个好习惯。
-
对于线程切换,检查 dabeaz.com/python/UnderstandingGIL.pdf> 和 'tick' 的概念
-
另见
sys.setcheckinterval的文档 -
我同意@StephaneMartin - 这听起来更像是 I/O 缓冲。见Disable output buffering
标签: python multithreading