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

问题描述 投票:1回答:1

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

python time gevent
1个回答
3
投票

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

gevent.sleep()将把当前的greenlet送到gevent hub,让其他greenlets运行。 time.sleep()不会屈服于枢纽;它将简单地挂起整个当前线程以及可能想在其上运行的所有greenlet。

另一方面,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中提供,特别是关于事件循环,协作式多任务和伪线程(greenlets)的部分。

© www.soinside.com 2019 - 2024. All rights reserved.