Gevent 1.0之前的更改

0.13.8版(2012年9月6日)

  • 固定的 issue #80 :gevent.httplib因超时被tomasz prus重置为1s.patch而失败,并出现requestfailed错误。

  • 核心:用最新的cython修复编译:移除emit-ifdef/emit-else/emit-endif。

  • 固定的 issue #132 :gevent.socket.gethostbyname(<unicode>)现在执行ASCII编码并使用gevent的冲突解决程序,而不是调用内置冲突解决程序。亚历克赛·博泽科夫的补丁。

0.13.7版(2012年4月12日)

  • 固定的 issue #94 :如果memoryview在python 2.7的get内存中失败,则返回缓冲区。

  • 固定的 issue #103Queue(None).full() 收益率 False 现在(以前它返回 True

  • 固定的 issue #112 :线程。_睡眠没有修补。多亏了大卫·拉比森尼尔。

  • 固定的 issue #115 :_dummy获得意外的超时参数。

0.13.6版(2011年5月2日)

  • 补充 __copy__ 方法到 gevent.local.local 实现与内置程序兼容的复制语义的类 threading.local . 修补者 高尔菲·邦迪 .

  • 固定的 StreamServer 要捕获的类 EWOULDBLOCK 而不是 EAGAIN . 这修复了Windows上许多虚假的回溯,其中这两个常量不相同。修补者 亚历克赛·博岑科夫 .

  • 固定的 issue #65fork() 现在电话 event_reinit 仅在子进程中;否则,使用libevent2时进程可能挂起。修补者 亚历山大·布德卡尔 .

0.13.5版(2011年4月21日)

  • 修复了python 2.5上的构建问题

0.13.4版(2011年4月11日)

  • 固定的 TypeError 发生在 environ["wsgi.input"].read 使用整数参数调用了函数。

  • 固定的 issue #63monkey.patch_thread() 现在补丁 threading 同样,即使它已经被导入。修补者 肖林赛 .

  • 固定的 issue #64joinall()killall() 如果参数包含重复的greenlet,则用于挂起的函数。

  • 固定的 issue #69pywsgi.WSGIServer 如果客户端在最后一个请求后没有正常关闭连接,则报告“由对等方重置连接”。这样的错误现在被忽略了。

  • 固定的 issue #67 制成的 wsgi.WSGIServer 添加 REQUEST_URI 到环境。修补者 安德烈亚斯·布利特 .

  • 固定的 issue #71 :猴子修补 httplib 具有 gevent.httplib 用来打破 HTTPSConnection . 修补者 尼克·巴克斯 .

  • 固定的 issue #74create_connection 现在引发适当的异常 getaddrinfo 失败。

  • 固定的 BaseServer.__repr__() 方法, BaseServer.server_hostBaseServer.server_port 要处理的情况的属性 AF_UNIX 地址正确。以前他们假设地址总是一个元组。

  • 固定的 pywsgi.WSGIServer 处理 AF_UNIX 听众。服务器现在设置 environ["SERVER_NAME"]environ["SERVER_PORT"] 在这种情况下清空字符串。

  • 制作 StreamServer (因此) pywsgi.WSGIServer )每个就绪通知最多接受100个连接。这种行为是由 StreamServer.max_accept 类属性。

  • 如果绑定失败,服务器现在会在错误消息中包含导致绑定失败的地址。

0.13.3版(2011年2月7日)

  • 固定打字错误 gevent.httplib 这使得它无法使用。

  • 消除不必要的延迟 getaddrinfo 通过呼叫 resolve_ipv4resolve_ipv6 同时而不是按顺序 AF_UNSPEC 案例。

0.13.2版(2011年1月28日)

  • 补充 gevent.httplib —— 实验的 支持libevent HTTP客户端 (issue #9 )多亏了 汤米·甘纳_Rjan Persson .

  • 修复了Mac OS X上的崩溃 (issue #31 )。修补者 亚历克赛·博岑科夫 .

  • 固定兼容性 gevent.wsgi 使用libevent2 (issue #62

  • 修复了libevent2的编译问题。修补者 拉尔夫·施密特 .

  • 固定的 pywsgi 在304和204响应的情况下,不要使用分块传输编码,因为它创建了一个非空消息体,这违背了RFC并导致一些浏览器失败。修补者 尼古拉斯·皮埃尔 .

  • 固定的 socket.getaddrinfo() 处理 AF_UNSPEC 正确并解析服务名称 (issue #56 )多亏了 伊丽莎白·詹妮弗·迈尔斯 .

  • 固定的 socket.getaddrinfo() 处理国际域名。

  • 修复了用 sys.exc_info 集合。通过根本不保留回溯和只保留异常值来防止泄漏。多亏了 内德·洛克森 .

  • 固定的 ssl.SSLSocket.unwrap() 关闭 SSLSocket 适当,不升高 SSLError(read operation timeout) .

  • 固定的 TypeError 里面 Hub 在python 2.4上。

  • gevent.pywsgi 使子类化更容易。

  • 改变 WSGIServer 在最后一个请求之后显式关闭套接字。修补者 拉尔夫·施密特 .

  • 固定的 pywsgi.WSGIHandler 不添加 CONTENT_TYPE环境 当没有口述的时候 Content-Type 请求中的头。以前是默认值 text/plain 在这种情况下添加了。

  • 添加了适当的 imap_unorderedPool 类。与以前的“虚拟”实现不同,这个实现一准备好就开始产生结果。

  • 在中实现了迭代器协议 Queue . 主要的用例是 Pool.imap_unordered() .

  • 固定的 BaseServer.started 属性:现在设置为 True 之后 start 直到 stopkill . 以前它可能变成 False 在短时间内,因为 StreamServer 可能会在出现错误的情况下暂时停止接受 StreamServer.started 定义为“服务器当前是否接受”。

  • 固定的 wsgi.WSGIServer 如果应用程序出现错误,则立即返回500错误 (issue #58 )多亏了 乔恩·阿斯隆德 .

  • 补充 monkey.patch_httplib() 默认禁用的函数。

  • 补充 httplib 参数到 monkey.patch_all() (默认为 False

  • 补充 write 方法到 core.buffer .

  • 固定的 OverflowError 可能发生在 core.event.__str__() .

  • 制造 http_request.get_input_headers() 以小写返回标题名称。

  • 固定的 StreamServer 接受 密码 作为一个ssl参数。

  • 补充 build_exc --cython= 选择权 setup.py . 修补者 拉尔夫·施密特 .

  • 更新的 local 提高 AttributeError 如果 __dict__ 属性已设置或删除。

0.13.1版(2010年9月23日)

发布亮点:

  • 固定的 monkey 修补 socket.create_connection .

  • 更新的 gevent.ssl 模块完全匹配 ssl 在python 2.7上。

  • Fixed Group.join() to handle raise_error=True properly, it used to raise TypeError (issue #36). Thanks to by David Hain.

  • 固定的 gevent.wsgigevent.pywsgi 加入多个 Cookie 报头 (issue #40

  • 固定的 select 识别 longint .

  • Fixed Semaphore.acquire() to return False when timeout expires instead of raising AssertionError (issue #39). Patch by Erik Näslund.

  • 固定的 JoinableQueue.join() 如果队列已为空,则立即返回 (issue #45 )。修补者 德米特里·切奇克 .

  • 已弃用 gevent.sslold 模块。

gevent.socket 模块:

  • 飞越 socket.shutdown() 在套接字上中断读/写操作的方法。

  • 可能已修复 NameError 在里面 socket.connect_ex() 方法。修补者 亚历克赛·博岑科夫 .

  • 固定插座泄漏 create_connection() 功能。

  • 制造 gevent.socket 从stdlib导入所有公共项 socket 那不需要I/O。

gevent.ssl 模块:

  • 通过从stdlib导入了许多修补程序 安托万皮托

    • 调用 makefile() ssl对象上的方法将阻止关闭底层套接字,直到所有对象被真正销毁(python问题5238)。

    • 如果另一端没有响应(python问题5103),SSL握手将忽略套接字超时并无限期阻塞。

    • 打电话时 getpeername() 在里面 SSLSocket.__init__ ,仅静默由“套接字未连接”条件引起的异常。

  • 为添加了支持 密码 参数。

  • 更新的 SSLSocket.sendSSLSocket.recv 匹配stdlib行为的方法 ssl 更好。

  • 固定的 ssl.SSLObject 在关闭实例时删除其他greenlet使用的事件 (issue #34

其他:

  • 制造 BaseServer 接受 long 值为 pool 除此之外的论点 int .

  • 制造 http._requests 属性公共。

  • 更新了WebChat示例,使用磁盘上的文件而不是内存中的sqlite数据库来避免 OperationalError .

  • 固定的 webproxy.py 在外部wsgi服务器下可运行的示例。

  • 修复了中的伪故障 test__exc_info.py .

  • 增加新的测试以检查PEP8的一致性: xtest_pep8.py .

  • 固定的 BackdoorServer 关闭上的连接 SystemExit 简化了代码。

  • 制造 Pool 提升 ValueError 初始化时使用 size=0 .

  • 更新的 setup.py --libevent 配置并生成libevent(如果尚未生成)。

  • 更新的 setup.py 使用 setuptools 如果存在并添加依赖项 greenlet .

  • 已将doc/mysfinxext.py修复为与sphinx 1一起使用。谢谢 _Rjan Persson .

0.13.0版(2010年7月14日)

发布亮点:

  • 补充 gevent.server 模块 StreamServer 类以便于实现TCP和SSL服务器。

  • 补充 gevent.baseserver 模块 BaseServer 班级。

  • 新增了 gevent.pywsgi 基于 gevent.server . 贡献者 拉尔夫·施密特 .

  • 补充 gevent.local 模块。固定的 issue #24 . 多亏了 泰德·苏兹曼 .

  • 修复了 gevent.wsgi 模块。

  • 固定的 issue #26 :关闭一个套接字会中断对它的所有挂起的读/写操作。

  • 实施了防止绿地泄漏的解决方案 exc_info .

  • 固定的 socket.sendall() 使用缓冲区对象来防止字符串复制。

  • 使接口 gevent.wsgigevent.pywsgi 彼此更相似。

  • 修复了使用libevent-2在Windows上编译的问题。

  • 改进了Windows兼容性。固定的 issue #30 . 多亏了 路易吉·普格内蒂 .

  • 修复了与python 2.7的兼容性。

向后不兼容的更改:

  • 阻塞现在是 Greenlet.kill() 方法和其他杀戮方法。

  • 改变了 http.HTTPServer 以匹配其他服务器的接口。

  • 改变 Poolspawn() 方法阻塞直到有一个空闲的槽。

  • 已删除,已弃用 backdoor.backdoor_server() 功能。

  • 已删除中不推荐使用的函数 socket 模块:

    • socket_bind_and_listen()

    • set_reuse_addr()

    • connect_tcp()

    • tcp_server()

  • 已删除,已弃用 socket.fd 财产。

  • 已弃用负数表示中的无限超时 core.event.add()socket.wait_read() 类似的。使用 None 从现在开始,它与以前的版本兼容。

  • 衍生的 backdoor.BackdoorServerStreamServer 而不是来自 Greenlet . 这增加了许多新功能,并删除了一些旧功能。

  • 删除非标准 balance 属性来自 Semaphore .

  • 远离的 start()set_cb()set_gencb()core.http .

  • 远离的 set_closecb()core.http_connection . 它现在在内部用于分离已关闭连接的请求。

  • 已弃用 rawgreenlet 模块。

  • 已弃用 util.lazy_property() .

  • 更名 GreenletSetGroup . 旧名称当前可用作别名。

gevent.socket 模块:

  • 固定问题 issue #26issue #34 :读/写/连接时关闭插座现在是安全的。多亏了 西里尔湾 .

  • 进口 getfqdn()socket 模块。

  • 模块现在使用 sys.platform 检测窗口而不是 platform 模块。

  • 固定的 issue #27getaddrinfo() 用于处理案件时 SOCKT型原始的 等于 0 . 多亏了 兰德尔·利兹 .

gevent.coros 模块:

  • 补充 RLock 班级。

  • 补充 DummySemaphore 班级。

  • 固定的 BoundedSemaphore 课堂表现得像 threading.BoundedSemaphore 表现。

gevent.event 模块:

  • 制造 Event.wait() 返回内部标志而不是 None .

  • 制造 AsyncResult.wait() 返回其 value 而不是 None .

  • 补充 ready() 方法作为的别名 is_set() .

gevent.wsgi 模块:

  • 远离的 wsgi.buffer_proxy .

gevent.pywsgi 模块:

  • 重写以使用 server 而不是依赖 BaseHTTPServer .

  • 已更改接口以匹配 wsgi 模块。远离的 server() 函数,添加 Server 类,已添加 WSGIServer 班级。

  • 更名 HttpProtocolWSGIHandler .

  • 通过允许可选参数 readline() .

gevent.core 模块:

  • 修复了参考泄漏 event 班级。

  • 访问ev时避免python名称查找_ 来自Cython代码的常量。修补者 丹尼尔·瓦拉佐 *.

  • 补充 坚持 参数 read_eventwrite_eventreadwrite_event .

  • 使所有事件循环回调在退出前清除异常信息。

  • 补充 flags_str 属性到 event . 它被 __str____repr__ .

  • buffer

    • 补充 detach() 方法。

    • 实现了迭代器协议。

    • 固定的 readline()readlines() 方法。

  • http_request

    • 固定的 detach() 分离输入和输出缓冲区。

    • 如果用户未发送响应,则将响应更改为释放时发送500错误。

    • 制造 input_bufferoutput_buffer 存储并重新使用 buffer 他们创建的对象。

    • 固定的 __str__() 方法:“在需要的地方加上空格。”

    • http 类不再具有 set_cb()set_gencb() . 相反,其承包商接受 手柄 每次请求时都会调用。

gevent.httpgevent.wsgi 模块:

  • 制造 HTTPServer 使用 "Connection: close" 默认为标题。

  • 等级 HTTPServer 现在源于 baseserver.BaseServer . 因此 start() 方法不再接受套接字侦听,必须将其传递给构造函数。

  • 这个 产卵 参数现在接受 Pool 实例。当池已满时,服务器将返回503错误。

  • 服务器不再链接到它生成的greenlet来检测错误。相反,它依赖于 http_request 如果用户没有发送任何回复,则释放时将发送500个回复。

其他:

  • 改变 gevent.thread 使用 Greenlet 而不是生菜。这意味着猴子修补线将成为 Greenlet 也是。

  • 补充 started 属性到 Greenlet .

  • 放入通用服务器代码 gevent.baseserver 模块。gevent包中的所有服务器现在都派生自 BaseServer .

  • 固定的 issue #20sleep() 现在提出 IOError 如果传递了一个负参数。

  • 从setup.py as宏中删除与查找libevent版本相关的代码 USE_LIBEVENT_? 不再需要生成 gevent.core .

  • 增加了所有服务器的默认积压工作(从5到256)。多亏了 尼古拉斯·皮埃尔 .

  • 修正了doc/conf.py在2.6之前的python中的工作。多亏了 _Rjan Persson .

  • 沉默的系统错误在中引发 backdoor 当客户机键入 quit() .

  • 如果导入 greenlet 因importError而失败,请保留原始错误消息,因为有时错误源自安装工具。

  • 改变 select.select() 返回所有已发出信号的文件描述符,而不仅仅是第一个。

  • 制造 thread (因此猴子修补线)来产卵 Greenlet 实例,而不是未加工的greenlet。

实例:

  • 更新echoserver.py以使用 StreamServer .

  • 添加了geventsendfile.py。

  • 添加了wsgiserver_ssl.py。

多亏了 拉尔夫·施密特 对于 pywsgi ,对 wsgi ,帮助 baseserverserver 模块,改进setup.py和各种其他补丁和建议。

多亏了 乌列尔·卡茨 对于 pywsgi 补丁。

0.12.2版(2010年3月2日)

  • 修复了将侦听套接字置于非阻塞模式的HTTP服务器。贡献者 拉尔夫·施密特 .

0.12.1版(2010年2月26日)

  • 从分发中删除了一个符号链接(这会导致PIP失败)。多亏了 布拉德·克莱门茨 用于报告。

  • setup.py:自动从创建symlink build/lib.../gevent/core.sogevent/core.so .

  • gevent.socket :改进了与stdlib套接字的兼容性:

    • 固定的 socket 提高 timeout("timed out") 而不是简单的 timeout .

    • 进口 _GLOBAL_DEFAULT_TIMEOUT 来自标准 socket 模块而不是创建新对象。

0.12.0版(2010年2月5日)

发布亮点:

  • 补充 gevent.ssl 模块。

  • 固定的Windows兼容性(实验)。

  • 改进的性能 socket.recv()socket.send() 以及类似的方法。

  • 添加了一个新模块- dns -在libevent的DNS API周围使用同步包装器。

  • 补充 core.readwrite_eventsocket.wait_readwrite() 功能。

  • 修正了 wsgi 具有wsgi规范的模块。

  • 已弃用 pywsgi 模块。

gevent.wsgi 模块:

  • 制造 env["REMOTE_PORT"] 变成一根绳子。

  • 修复了关闭应用程序返回的迭代器的服务器。

  • 制造 wsgi.input 对象不可访问。

gevent.core 模块:

  • 使DNS功能不再接受/返回点和数字格式的IP地址。他们现在使用打包的IP。

  • 使DNS函数不再接受传递到回调的其他参数。

  • 固定的DNS函数检查libevent函数的返回值并引发 IOError 如果他们失败了。

  • 补充 core.dns_err_to_string() .

  • made core.event.cancel如果事件删除报告错误,则不引发。相反,返回代码被传递给调用者。

  • 修正了事件字符串表示中的次要问题。

gevent.socket 模块:

  • 修正了socket.accept中的错误。如果socket的超时为0,它可以返回未封装的socket实例。

  • 固定socket.sendall实现从不调用基础socket的sendall。

  • 固定的 gethostbyname()getaddrinfo() 如果传递的主机名没有点,则调用stdlib。

  • 固定的 getaddrinfo() 使用筛选结果 SOCKT型原始的 参数。

  • 远离的 getnameinfo() 因为它与stdlib接口不太匹配。使用 dns.resolve_reverse() 对于反向分辨率。

  • 固定的 socket.connect_ex() 使用合作社 gethostbyname() .

  • 固定的 socket.dup() 不调用基础套接字 dup() (在Windows上不可用)但是使用类似于stdlib套接字实现方式的python引用计数 dup()

  • 补充 _sock 参数 socket 的构造函数。不再支持将套接字实例作为第一个参数传递。

  • 固定的 socket.connect() 忽视 WSAEINVAL 在Windows上。

  • 固定的 socket.connect() 使用 wait_readwrite() 而不是 wait_write() .

  • 固定的 socket.connect() 咨询 SO_ERROR .

  • 固定的 socket.send()socket.sendall() 支持 旗帜 参数。

  • 更名 socket_bind_and_listen()socket.bind_and_listen() . 旧名称仍可用作已弃用的别名。

  • 基础socket对象现在存储为 _sock 财产。

  • 从stdlib导入常量和一些实用程序函数 socket 进入之内 gevent.socket . (多亏了 马特·古德尔 对于原始补丁)。

  • 更名 wrap_ssl()ssl() . (旧名称仍然可用,但已弃用)

  • 已弃用 connect_tcp()tcp_server() .

  • 补充 sslerrorsocket.__all__ .

  • 远离的 GreenSocket Socket类的别名。

  • 移动了基于pyopenssl的 socket.ssl() 进入之内 gevent.oldssl 模块。它被导入 gevent.socket 如果导入 gevent.ssl 失败。

其他:

  • 固定的greenlet.spawnu链接 * and GreenletSet.spawn_link* 类方法对其参数不做任何假设。(多亏了 马库斯·卡瓦诺 为了指出这一点)。

  • 固定的 select 如果事件创建失败,请正确清除。

  • 固定的 select 提高 select.error 而不是 IOError .

  • 修复了继续编译的setup.py,即使无法确定libevent版本。在这种情况下,假定为x.x。

  • 修复了.pyx文件与cython 0.12.0的兼容性。

  • 重命名的参数 select.select() 它们在stdlib中被称为什么。

  • 已删除内部功能 getLinkedCompleted()gevent.greenlet .

  • 去除 #warning 指令来自 libevent.h . VC90不支持它们。

  • 从中删除一些不推荐的内容 coros .

  • 内部类 Waiter 现在,如果没有人等待,则存储该值。

  • 补充 testrunner.py 替换以前使用过的一组小脚本的脚本。

  • 远离的 is_secure 来自套接字和SSL对象的属性。

  • 制造 Greenlet 当一个还没有开始的绿精灵被杀死时,不要打印一个回溯。

  • 补充 BackdoorServer 类到 backdoor . 远离的 backdoor() 函数,已弃用 backdoor_server() 功能。

  • 远离的 __getattr__ 从套接字类。

  • 固定的 monkey.patch_socket() 如果 socket.ssl() 不存在于 gevent.socket .

  • 补充 monkey.patch_ssl() .

  • 补充 侵略性的 参数 monkey.patch_all() .

  • 来自stdlib的测试不再包含在greenttest包中。相反,有许多存根从 test 直接打包并在猴子补丁环境中运行它们。

  • 添加示例/process.py by 马库斯·卡瓦诺 .

0.11.2版(2009年12月10日)

  • 固定的 wsgi 取消引用 environ['PATH_INFO'] 在传递到应用程序之前。

  • 补充 SERVER_SOFTWARE 变量到 wsgi 环境。

  • 固定错误 JoinableQueue.task_done() 导致 ValueError 在这里被错误地抬高。

  • 固定的 gevent.socket 不要失败 ImportError 如果python不是用ssl支持构建的。

0.11.1版(2009年11月15日)

  • 固定错误 select.select() 功能。传递用于导致此函数失败的写入描述符的非空列表。

  • 将setup.py更改为继续编译,即使无法确定libevent的实际版本(在这种情况下假定为版本1.x.x)。

贡献者 路德维格·埃里克森

  • 固定的 wsgistart_response 识别 exc_info 参数。

  • 修正了在达尔文平台上查找libevent.dylib而不是.

0.11.0版(2009年10月9日)

  • 修正了超时错误 joinall()Greenlet.join()pool.Pool.join() :如果超时已过期,则用于提升 Timeout 现在它安静地回来了。

  • 固定的 signal() 在新greenlet中运行信号处理程序;它在 Hub 格林莱特之前。

  • 固定的 Timeout.start_new() :如果通过 Timeout 例如,它现在调用 start 方法。

  • 固定的 gevent.monkey 修补 threading.local 正确。

  • 固定的 Queue.empty() and Queue.full() to be compatible with the standard Queue. It tried to take into account the greenlets currently blocking on get/put 这是没有用的,很难解释的。现在它只是比较 qsize最大尺寸 什么标准? Queue 也一样。

  • 固定的 Event 完全按照标准行事 threading.Event

    • Event.set() 不再接受参数;它现在已设置或未设置。

    • Event.get 方法已不存在。

    • Event.set(); Event.clear() 以前是不允许的,现在它能正确地唤醒所有的侍者。

    • AsyncResult 行为与以前完全相同,但它不继承自 Event 再也不会错过了 clear() 方法。

  • 重命名的内部助手 socket.wait_reader()/socket.wait_writer()socket.wait_read()/socket.wait_write() .

  • 更名 gevent.socket.GreenSocketgevent.socket.socket . GreenSocket 仍可用作别名,但将在将来删除。

  • gevent.core 现在包括evbuffer、evdns、evhttp的包装器。

  • 重新命名旧的 gevent.wsgigevent.pywsgi .

  • 添加了新的HTTP服务器 gevent.http 基于libevent HTTP包装器的模块。

  • 添加了新的wsgi服务器 gevent.wsgi 基于模块 gevent.http .

  • 已将evdns包装器添加到 gevent.core 和DNS功能 gevent.socket 模块。贡献者 杰森·托法莱蒂。 .

  • 增加了一些选项 setup.py 选择要编译的libevent库。和他们一起检查 setup.py -h .

  • 补充 __all__ 很多模块都没有看到它。

  • 已将docstrings和changelog转换为sphinx/rst标记。

  • 增加了Sphinx/RST文件。可在线访问http://www.gevent.org。

0.10.0版(2009年8月26日)

  • 改变 Timeout API采用向后不兼容的方式: Timeout.__init__() 不再立即启动计时器; Timeout.start() 必须显式调用。快捷方式- Timeout.start_new() -提供用于创建和启动 Timeout .

  • 补充 gevent.Greenlet class which is a subclass of greenlet that adds a few useful methods join/get /:meth:kill/:meth:link

  • spawn() 现在回报 Greenlet 实例。旧的 spawn ,返回 py.magic.greenlet 实例,仍可以访问为 spawn_raw() .

    注解

    实施 Greenlet 是对 proc 模块,修复了这些错误:

    • proc不是greenlet的子类 getcurrent() 在听写中使用procs作为键是不可能的。

    • proc按顺序执行链接,这样就可以阻止其他链接被执行。 Greenlet 默认情况下执行新greenlet中的每个链接,除非使用 Greenlet.rawlink 方法。

    • proc不能很容易被子类化。到子类 Greenlet ,覆盖其运行并 __init__ 方法。

  • 补充 pool.Pool 用与标准兼容的方法初始化 multiprocessing.poolapplymap 以及其他。它也有 spawn 方法,该方法始终异步并返回 Greenlet 实例。

  • 补充 gevent.event module with 2 classes: Event and AsyncResult. Event is a drop-in replacement for threading.Event, supporting set/wait /``获取``方法。 AsyncResult 是的扩展 Event 支持通过 set_exception 方法。

  • 补充 queue.JoinableQueue 上课用 task_donejoin 方法。

  • 更名 core.readcore.write 类到 core.read_eventcore.write_event .

  • gevent.pywsgi :拉动 迈克·巴顿的 修复双倍内容长度问题的eventlet修补程序。

  • 固定的 setup.py 搜索更多位置以安装系统libevent。这修复了64位CentOS 5.3的安装问题,希望也能覆盖其他平台。

以下项目已添加到GEvent顶层包中:

以下项目被标记为已弃用:

  • GEvent.proc模块 (wrap_errors 帮助程序已移动到 util 模块)

  • gevent.coros.event

  • gevent.coros.queue和gevent.coros.channel

内部, gevent.greenlet 被拆分为多个模块:

  • gevent.hub 提供 Hub 类和基本实用程序,如 sleep()Hub 现在是greenlet的一个子类。

  • gevent.timeout 提供 Timeoutwith_timeout()

  • gevent.greenlet 提供 Greenlet 班级和帮手 joinall()killall() .

  • gevent.rawgreenlet 包含的旧“轮询”版本 joinallkillall (他们不需要 link 通过轮询任何greenlet的状态并在一个循环中休眠,实现功能并与之合作)

多亏了 杰森·托法莱蒂 用于报告安装问题并为wsgi双内容长度头错误提供测试用例。

0.9.3版(2009年8月3日)

  • 修复了 gevent.queue 并使其与2.4兼容。 LifoQueuePriorityQueue 也被执行。 gevent.queue 都会贬低 coros.Queuecoros.Channel .

  • 固定的 Timeout 默认地提升自己。 TimeoutError 不见了。现在通过传递创建静默超时 False 而不是 None .

  • 固定错误 gevent.select.select() 在那里它可以使错误的超时保持静音。

  • spawn()spawn_later() 现在避免创建一个闭包,这将减少50%的产卵时间。

  • kill S和 killallwait 参数已重命名为 . 投票现在由 greenlet.joingreenlet.joinall 随着睡眠时间的逐渐增加,它变得更加灵敏。

  • 更名 proc.RunningProcSetproc.ProcSet .

  • 补充 shutdown() 函数,在libevent完成事件调度之前阻塞。

  • 的返回值 event_addevent_del 现在正确检查了core.pyx中的 IOError 如果失败则引发。

  • 修复了backdoor.py,在上一版本中意外损坏。

0.9.2版(2009年7月20日)

  • 简化 gevent.socket 的实现和修复了由 塞萨尔·阿兰尼兹 以及 test_socket_ssl.py .

  • 远离的 GreenSocket.makeGreenFile 使用 socket.socket.makefile() 它会回来 _fileobject 两者都有 GreenSocketGreenSSL . 这个 gevent.socket 仍在进行中。

  • 新增 core.active_event 利用libevent的 event_active 功能。 core.active_event(func) 在此事件循环迭代中调度要运行的func,而不是 core.timer(0, ...) 它安排一个事件在下一个迭代中运行。 active_event 现在在类库的任何地方使用 core.timer(0, ....) 以前使用过。这导致 spawn() 比0.9.1版快至少20%,比Eventlet快两倍。(使用中的bench_spawn.py脚本获得结果 greentest/ 目录)

  • 添加了布尔参数 waitkill()killall() 功能。如果设置为 True ,它将生成函数块,直到greenlet实际死亡。默认情况下, kill()killall() 是异步的,也就是说,他们不会临时安排当前的绿let。

  • 向添加了一些新属性 gevent.core.eventfdeventsevents_strflags . 它也有 __enter____exit__ 现在,它可以用作上下文管理器。 eventcallback 签名已从更改 (event, fd, evtype)(event, evtype) .

  • 固定的 Hub 的主循环永远不会成功返回,因为这会使主greenlet的 switch() 打电话。而不是返回它上升 DispatchExit .

  • 补充 reinit() 函数-libevent的包装器 event_reinit . 此函数是一个必须至少具有的守护进程,因为它修复了 epoll 以及其他一些事件循环 fork .

  • 尝试在另一个线程中使用gevent现在将立即引发异常,因为它尚未实现。

  • 增加了一些方便的方法 spawn_link[exception/value]proc.RunningProcSet .

  • 固定的 setup.py 不依赖 setuptools .

  • 远离的 gevent.timeout . 使用 gevent.Timeout .

0.9.1版(2009年7月9日)

  • 使用libevent-1.3修复编译。多亏了 李太伟 用于报告问题。

  • 固定的 Hub 在…之后安静地恢复 event_dispatch() 失败(我见过这种情况发生在 fork 尽管 event_reinit() 必要时调用)。最终结果是 fork() 现在工作更可靠,正如 test_socketserver.py -它以前偶尔会失败,现在却没有了。

  • 重新组织包装,大部分材料来自 gevent/__init__.py 已移至 gevent/greenlet.py . gevent/__init__.py 把它的一部分进口回来,但不是全部。

  • 更名 gevent.timeoutgevent.Timeout . 旧名称可用作别名。

  • 修正了一些错误 queue.Queue . 从标准测试中添加了test_queue.py,以检查有多好 queue.Queue 标准的替代品 Queue (一点都不好,超时 queue.Queue.put() 还不工作)

  • monkey 现在,在2.6(非常有限的支持)上修补SSL模块。

  • 改进了与python 2.6和python 2.4的兼容性。

  • 现在可以正确识别从pypi安装的greenlet(不带py.magic前缀)。

  • core.pyx被意外地从源包中删除,它现在包含在源包中。

  • GreenSocket 现在包装 socket 对象从 _socket 模块而不是来自 socket .

0.9.0版(2009年7月8日)

开始为 eventlet 0.8.11 fork,仅支持libevent作为后端。与eventlet相比,这个版本有一个更简单的API和实现,并修复了一些严重的错误,即

  • 全双工插座,即 read()write() 在同一个fd上,不要相互取消。

  • 这个 GreenSocket.close 方法不能像处理Eventlet那样挂起。

在我对eventlet的报告中有一个测试复制了这两个测试:http://bitback.org/denis/eventlet/src/tip/greenttest/test_uu socket.py

除了拥有更少的bug和更少的代码来关注fork的目标之外,还包括:

  • 尽可能多地使用libevent(使用其http和dns代码)。

  • 尽可能使用标准python库中的接口和约定。

Next page: 介绍