eventlet.greenthread.sleep与monkey-patched环境中的time.sleep对比

3 投票
1 回答
1965 浏览
提问于 2025-04-18 17:19

我们在用 eventlet 的绿色线程运行一个服务器,并且对所有东西都进行了猴子补丁(也就是修改了一些库的行为)。我需要实现一个等待循环,里面要定期检查一些东西,并且想在里面加个休眠。

我想知道以下两种写法有什么区别:

eventlet.greenthread.sleep(1) AND time.sleep(1) 

在猴子补丁的环境下,这两种写法有什么不同吗?我在想猴子补丁会不会影响 time.sleep 的功能。

1 个回答

6

在猴子补丁的环境中,它们是一样的。eventlet 默认会对 time.sleep 进行猴子补丁:

没有猴子补丁的情况:

>>> import time
>>> time.sleep.__module__
'time'

有猴子补丁的情况:

>>> import eventlet
>>> eventlet.monkey_patch()
>>> import time
>>> time.sleep.__module__
'eventlet.greenthread'

如果 eventlet.monkey_patch 的调用指定了要进行猴子补丁的模块子集,而不包括 'time',那么就不会进行猴子补丁:

>>> import eventlet
>>> eventlet.monkey_patch(socket=True, thread=True)
>>> import time
>>> time.sleep.__module__
'time'

撰写回答