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

时间:2019-03-28 11:38:28

标签: python time gevent

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

1 个答案:

答案 0 :(得分:1)

(回想一下,gevent在单个Python线程上运行多个greenlet,以协作方式对其进行多路复用以执行协作式多任务处理,并在它们之间进行切换以阻止IO。)

gevent.sleep()会将当前的greenlet生成到gevent hub,从而允许其他greenlet运行。 time.sleep()不会屈服于中心;它将简单地挂起整个当前线程和可能在其上运行的 all greenlets。

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

如果您已经使用gevent.monkey.patch_all()用猴子修补了程序(足够早),则time.sleep只是gevent.sleep的别名,没有区别。

在使用gevent的程序中,通常建议使用猴子补丁或显式使用gevent.sleep代替time.sleep,否则,您将无法获得合作式Greenlet的全部好处。

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