本文仅仅介绍gevent.core.loop类所涉及的接口使用,这些接口是gevent中核心greenlet(Hub)运行的基础。
gevent.core封装了libev的代码,在源码中以core.so文件存在。
有两种方式可获取loop对象:
- 通过gevent.get_hub().loop获取
- 直接使用loop类来获取
from gevent import core loop = core.loop()
loop events
MAXPRI None
默认值是2,不知道是干什么用的
MINPRI None
默认值是-2, 不知道是干什么用的
WatcherType None
未知
activecnt None
未知
async()
未知
backend None
事件机制类型,epoll kqueue
backend_int None
未知
break_()
未知
child()
未知
default None
未知
depth None
未知
destroy()
未知
error_handler None
未知
fileno()
socket 文件描述符
fork()
未知
handle_error()
未知
idle()
未知
install_sigchld()
未知
io()
创建socket文件的观察器.
1表示读数据状态,2表示写数据状态 代码片段
_watcher = self.loop.io(self.socket.fileno(), 1) _watcher.start(self._do_read)
iteration None
未知
now()
当前时间
origflags None
未知
origflags_int None
未知
pendingcnt None
未知
prepare()
未知
ptr None
未知
ref()
未知
reinit()
未知
run()
ev_run是libev的核心,
他主要做了五件事情:
1.更新更改的FD事件
2.进行必要的sleep
3.backend_poll收集pending的IO事件
4.收集pending的timer事件
5.调用所有pending的事件
run_callback()
将一个函数注册到io事件队列中
def hellowrold(): print 'hello world' gevent.get_hub().loop.run_callback(hellowrold) gevent.get_hub().loop.run()
以上代码会立刻执行hello world
sig_pending None
未知
sigfd None
未知
signal()
未知
stat()
未知
timer()
创建一个事件定时触发器,会定时执行一个callback函数
import gevent import time def hellowrold(): print 'hello world', time.time() gevent.get_hub().loop.run_callback(hellowrold) timer = gevent.get_hub().loop.timer(3.0) timer.start(hellowrold) gevent.get_hub().loop.run()
连续两次注册helloworld函数,第一次是立刻执行的,第二此是在3秒后执行
unref()
未知
update()
未知
verify()
未知