【发布时间】:2013-09-04 16:49:09
【问题描述】:
我还是 greenlets 和 gevent 的新手,但据我了解,greenlets 在显式的 yield 语句或阻塞 I/O 操作上屈服于其他 greenlets。但是使用 print 语句写入标准输出会阻塞吗?那么使用 logging 模块写入 stdout、stderr 或本地磁盘或 NFS 上的文件呢?
对 print 语句或日志记录方法的调用会导致 greenlet 切换吗?
【问题讨论】:
-
greenlet 本身永远不会隐式产生。 gevent 可能会修补许多标准库对象以获得这种效果(但我不能这样说,所以这只是一个评论,而不是一个答案:-)。
-
gevent 确实有一个猴子补丁操作,可以将某些模块替换为在阻塞 IO 调用时让给其他 greenlet 的版本(例如 gevent.socket)。然后我想知道的是,gevent.monkey.patch_all 是否会将日志记录模块使用的任何功能替换为其他greenlets的版本?