Gevent 1.3的新功能#

有关更改内容的详细信息,请参阅 1.3版的更改 。这份文件总结了自 gevent 1.2

Gevent 1.3是对性能、调试和监控以及平台支持的重要更新。它引入了一个(可选) libuv 循环实现,并在Windows上支持PyPy。看见 事件循环实现:libuv和libev 想要更多。

自GEvent 1.2.2以来,已有大约450个来自六个贡献者的提交。近100个拉取请求和100多个问题已关闭。

平台支撑#

gevent 1.3在cpython上支持python 2.7、3.4、3.5、3.6和3.7 (python.org) 翻译。它还支持 PyPy2 5.8.0及以上(推荐PYPY2 5.10或更高)和PYPY3 5.10.0。

小心

python 2.7.8及以下(python 2.7不带现代 ssl 模块),不再测试或支持。支持代码保留在此版本中,并且可以在此类实现上安装gevent,但不支持此类用法。对python 2.7.8的支持将在下一个主要版本的gevent中删除。

备注

Pypy现在在Windows上支持libuv循环实现。

python 3.7现在正在发布,gevent使用3.7b4进行测试,这是python3.7的最后一个测试版。

为了便于在Windows、OS X和Linux上安装,除了源代码外,gevent 1.3还作为预编译的二进制轮子分发。

备注

在Linux上,如果希望使用libuv循环实现,则需要从源代码安装gevent。这是因为 manylinux1 分布式车轮的规范不支持libuv。CFFI类库 must 在生成时安装。

Greenlet属性#

Greenlet 对象获得了一些有用的新属性:

“生”小菜 spawn_raw 默认为 spawning_greenletspawn_tree_locals .

这些额外的数据是由新的 gevent.util.print_run_info() 功能。

性能#

GEVENT 1.3在CPython上使用Cython来编译几个性能关键的模块。因此,整体性能得到了提高。具体来说,队列速度快5倍,池速度快10-20%,并且 gevent.local.local 快了40倍。见 pull request #1156pull request #1155pull request #1117pull request #1154 .

表现更好的回调#

在gevent 1.2.2中,事件循环回调(包括 sleep(0) )将按顺序运行,直到我们全部运行它们,或者直到我们运行10000。简单地计算回调的数量可能会导致在任意的、未绑定的时间段内没有IO被服务。为了纠正这一点,GEvent 1.3介绍了 gevent.getswitchinterval 在检查IO之前,将仅(大约)运行该时间段的回调。(这类似于python 2计算线程开关之间字节码指令的方式,但python 3使用的是更确定的计时器方法。)希望这将导致“更平滑”的应用程序行为和更少的陷阱。见 issue #1072 了解更多详细信息。

监视和调试#

许多新的greenlet属性对于监控和调试gevent应用程序很有用。gevent现在还可以(可选)监视调用阻塞函数和暂停事件循环的greenlet,并定期检查应用程序是否超过了配置的内存限制。见 监控和调试gevent应用程序 更多信息。

新的纯python DNS解析程序#

这个 dnspython 库是针对 名称解析(DNS) . 基准测试表明它比现有的C战神分解器更快,而且在Pypy上也更稳定。C-ARES分解器可能会被弃用,并在将来被移除。

API添加#

许多API在此版本中提供了稍微扩展的功能。在整个文档中查找“在1.3版中更改”或“在1.3版中添加”以了解详细信息。

注意事项的一些变化:

  • 低级观察程序对象现在有一个 close() 方法 must 立即处理本地(libev或libuv)资源。

  • gevent.monkey.patch_all 默认为修补 Event .

  • gevent.subprocess.Popen 在python 2中接受与在python 3中相同的关键字参数。

  • gevent.monkey.patch_all 以及各种单独的补丁函数,在补丁完成时发出事件。这可用于扩展新模块的修补过程。 patch_all 还将所有未知关键字参数传递给这些事件。见 pull request #1169 .

  • 模块 gevent.events 包含Gevent的某些部分可以发出的事件。它将使用 zope.event 如果安装了。

库更新#

与gevent捆绑在一起的一个C库已经更新。C-ARES已从1.13.0更新为1.14.0 (c-ares release notes

兼容性#

此版本旨在与1.2.x兼容,不更改客户端源代码,只要使用了不推荐使用的和受支持的接口(与往常一样,内部的、未记录的实现细节可能已经更改)。以下是一些特定的兼容性说明。

  • 这个 resolvers 已被重构。因此, gevent.aresgevent.resolver_aresgevent.resolver_thread 已弃用。在 GEVENT_RESOLVER 环境变量继续像以前一样工作。

  • 内部模块 gevent._threading 被显著地重构。顾名思义,这是一个内部模块,并不打算作为公共API的一部分,但已经观察到了这种用法。

  • 模块 gevent.wsgi 已删除。使用 gevent.pywsgi 相反。 gevent.wsgi 只是一个别名 gevent.pywsgi 自GEvent 1.0A1(2011年)起。