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.kill
和send_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.corecext
和 gevent.corecffi
也被移除了。
为了安全, gevent.pywsgi
不再接受包含下划线的传入头和传递给的头值 start_response
不能包含回车或换行符。见 issue #819 和 issue #775 ,分别。