Python 中 gevent.sleep() 和 time.sleep() 的区别

Difference between gevent.sleep() and time.sleep() in Python

gevent.sleep()Python中的time.sleep()有什么区别?什么时候 gevent.sleep()time.sleep()

(回想一下 gevent 运行 在单个 Python 线程上使用多个 greenlet,协同多路复用它们以执行协同多任务处理,在它们之间切换就像它们会阻塞 IO 一样。)

gevent.sleep() 会将当前的 greenlet 交给 gevent hub,允许其他 greenlet 运行。 time.sleep()不会屈服于轮毂;它会简单地挂起整个当前线程和 所有 greenlets 可能想要 运行 它。

另一方面,time.sleep 将释放 Python GIL 并允许其他 Python 线程有机会 运行(但仍会阻止调用的所有 greenlets线程),而 gevent.sleep 不会释放 GIL(除非在调用线程上没有其他 greenlets 准备 运行)。

如果您使用 gevent.monkey.patch_all() 对您的程序进行了猴子修补(足够早),那么 time.sleep 只是成为 gevent.sleep 的别名并且没有区别。

在使用 gevent 的程序中,通常建议使用 monkey patching 或显式使用 gevent.sleep 而不是 time.sleep,否则您将无法获得合作 greenlets 的全部好处。

the introductory gevent documentation 中提供了更多详细信息,特别是有关事件循环、协作多任务处理和伪线程 (greenlet) 的部分。