做网站人员配置,一个人看的浏览器,做网上商城网站哪家好,系部网站建设标准Python中GIL的存在#xff0c;导致多线程一直不是很好用#xff0c;相形之下#xff0c;协程的优势就更加突出了。 Python通过yield提供了对协程的基本支持#xff0c;但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库#xff0c;通过gr…Python中GIL的存在导致多线程一直不是很好用相形之下协程的优势就更加突出了。 Python通过yield提供了对协程的基本支持但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库通过greenlet实现协程其基本思想是 当一个greenlet遇到IO操作时比如访问网络就自动切换到其他的greenlet等到IO操作完成再在适当的时候切换回来继续执行。由于IO操作非常耗时经常使程序处于等待状态有了gevent为我们自动切换协程就保证总有greenlet在运行而不是等待IO。
gevent是基于协程的Python网络库。特点
基于libev的快速事件循环(Linux上epollFreeBSD上kqueue。基于greenlet的轻量级执行单元。API的概念和Python标准库一致(如事件队列)。可以配合socketssl模块使用。能够使用标准库和第三方模块创建标准的阻塞套接字(gevent.monkey)。默认通过线程池进行DNS查询,也可通过c-are(通过GEVENT_RESOLVERares环境变量开启。TCP/UDP/HTTP服务器子进程支持通过gevent.subprocess线程池
由于切换是在IO操作时自动完成所以gevent需要修改Python自带的一些标准库这一过程在启动时通过monkey patch完成