Gevent 1.2的新功能#

有关更改内容的详细信息,请参阅 1.2版的更改 . 本文档总结了自 gevent 1.1 .

一般来说,gevent 1.2比gevent 1.1的更新小,主要关注平台支持、标准库兼容性、安全性、错误修复和一致性。

平台支撑#

gevent 1.2在cpython上支持python 2.7、3.4、3.5和3.6 (python.org) 翻译。它还支持 PyPy2 4.0.1及以上(推荐PYPY2 5.4或更高)和PYPY3 5.5.0。

小心

移除了对python 2.6的支持。对python 3.3的支持只在pypy3上测试。

备注

在Windows上不支持Pypy。(Gevent的CFFI后端在Windows上不可用。)

python 3.6最近发布,与3.5的支持级别相同。

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

漏洞修补#

从1.1.2开始,gevent 1.2包含了来自9个不同的12个贡献者的超过240个提交。大约二十多个请求被合并。

改进的子流程支持#

在gevent 1.1中,子进程monkey修补在默认情况下首次打开。随着时间的推移,这导致了一些问题的发现和1.2中已修复的角落案例。

  • 在之后将sigchld设置为sig_ign或sig_dfl gevent.subprocess 以前使用过的不能逆转,导致 Popen.wait 以及其他挂起的电话。现在,如果SIGCHLD被忽略,下次 gevent.subprocess 这将被自动检测和纠正。(这可能导致 os.popen() 在python 2上,但信号总是可以再次重置。混合低级处理调用、低级信号管理和高级使用 gevent.subprocess 很棘手。)报告 issue #857 作者:Chris Utz。

  • Popen.killsend_signal 不再尝试向已知已退出的进程发送信号。

  • 这个 gevent.os.waitpid() 在更多情况下,功能是合作的。报告时间: issue #878 作者:Heungsub Lee。

API添加#

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

特别要注意的是,对子进程模块的几个向后兼容的更新已经从python 3返回到python 2,使 gevent.subprocess 更小、更容易维护,在某些情况下更安全,同时让gevent客户机甚至在旧版本的python上使用更新的API。

如果 concurrent.futures 是可用的(python 3,或者如果已经安装了python 2后端端口),那么类 gevent.threadpool.ThreadPoolExecutor 定义为创建一个始终使用本机线程的执行器,即使在系统被猴修补时也是如此。

库更新#

与gevent捆绑在一起的两个C库已经更新。libev已从4.20更新为4.23 (libev release notes )c-ares从1.10.0更新到1.12.0 (c-ares release notes

兼容性#

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

尤其是被否决的 gevent.coros 模块已移除,并且 gevent.corecextgevent.corecffi 也被移除了。

为了安全, gevent.pywsgi 不再接受包含下划线的传入头和传递给的头值 start_response 不能包含回车或换行符。见 issue #819issue #775 ,分别。