使用来自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()

开发

发生在:http://code.google.com/p/cogen/

trunk中获取最新和最棒的内容,请使用:

easy_install cogen==dev

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我们可以使用java for loop with switch语句。。?   java如何从具有循环关系的数据集生成树?   使用s:mvcUrl标记时java Spring启动问题   javascript Wicket调色板水平滚动条在firefox中不显示   java如何清理Maven插件绑定?   java将文件从设备发送到计算机不起作用(文件被破坏)   Java GPU编程的性能   java字符串标记器问题   连接Java LDAP断开连接   java Android GridView将无法确定正确的位置   java AlarmManager在指定时间未显示toast消息   MVC中的java测试外观|断言返回类型   logcat上的java Android运行时错误   java Building Workspace在Eclipse中遇到错误   堆栈溢出尾部递归遗传算法抛出“awteventque0”java。StackOverflowerr语言   java ArrayOutOfBounds测试代码不工作   java有没有像Moodle这样流行的课程管理系统?   java如何从jsp获取xml文件作为响应