使用来自Python2.5的增强的生成器(包括增强的WSGi服务器)进行协同路由和异步I/O。
cogen的Python项目详细描述
这是一个面向网络的、基于协程的编程库。
cogen的目标是在一个看似同步且简单的 以生成器的形式发出调用并接收结果的方式 从那个屈服点。这些调用转换为异步和快速操作系统调用 在cogen的内部。
显著功能
- 符合http1.1的wsgi服务器,具有异步扩展
- epoll、kqueue、select、i/o完成端口、后台发送文件
- 有几个有用的类可以让协程进入睡眠状态,等等 信号、排队、超时等
快速介绍
协同程序只是包装在helper类中的生成器:
from cogen.core.coroutines import coroutine @coroutine def mycoro(bla): result = yield <operation> result = yield <operation>
- 操作指示调度程序如何处理协同程序: 暂停它直到发生什么事情,在调度程序中添加另一个coro,提升 事件等等。
- 如果操作有关联的结果,则收益率将返回 结果(例如字符串或(连接,地址)元组),否则它将 返回操作实例。
echo服务器示例
from cogen.core import sockets from cogen.core import schedulers from cogen.core.coroutines import coroutine @coroutine def server(): srv = sockets.Socket() print type(srv) srv.bind(('localhost',777)) srv.listen(10) while 1: print "Listening..." conn, addr = yield srv.accept() print "Connection from %s:%s" % addr m.add(handler, args=(conn, addr)) @coroutine def handler(sock, addr): yield sock.write("WELCOME TO ECHO SERVER !\r\n") while 1: line = yield sock.readline(8192) if line.strip() == 'exit': yield sock.write("GOOD BYE") sock.close() return yield sock.write(line) m = schedulers.Scheduler() m.add(server) m.run()