码迷,mamicode.com
首页 > 其他好文 > 详细

gevent

时间:2018-03-07 23:55:14      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:proc   post   event   用法   imp   引用   调用   意义   join   

如果让程序阻塞在IO操作,会浪费时间和CPU资源。

gevent是Python中用来实现协程的工具。使用gevent,当发生阻塞的时候,会把程序控制权转移出去。

gevent是如何实现当阻塞时交出CPU控制权的呢?它把Python中的许多阻塞操作(如sleep,select,控制网络操作的socket等)重新实现了一遍。

如何管理多个协程的控制权呢?gevent实现了一套类似于Python multiprocess/thread库的接口。用spawn方法创建协程,用joinall方法等待协程完成。

需要注意的是,如果使用spawn传入的函数本身不能让出CPU控制权,那么用这种方法就和普通的同步操作没有区别,失去意义。

解决的方法是使用 monkey patch,这是一种在运行时动态改变类或模块的方法。

monkey patch的实现机制的核心是调用setattr方法。

为了 monkey patch 更改那些已经写好的库,首先要monkey patch,再import需要更改的库。

经典用法:

from gevent import monkey
monkey.patch_all()

import xxx(other modules you need)

在使用gunicorn起服务器的时候加一个 -k gevent_wsgi 参数就可以 patch all 所有的module

另外,写 monkey.patch_all() 的时候要确保正常的业务代码不会引用到这个模块,不要让其他人的代码在不知情的情况下被patch

 

gevent

标签:proc   post   event   用法   imp   引用   调用   意义   join   

原文地址:https://www.cnblogs.com/geeklove01/p/8524701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!