Gevent 1.0的新功能#
详细信息见 1.0版的更改 . 以下是0.13.8之后所有更改的摘要。
gevent 1.0支持python 2.5-2.7。所需的greenlet版本为0.3.2。源分发现在包括依赖项(libev和c-ares),除了greenlet之外没有依赖项。
新核心#
现在事件循环使用libev而不是libevent(有关动机,请参阅http://blog.gevent.org/2011/04/28/libev-and-libevent/)。
新的 gevent.core
已重写以包装libev的API。(在窗户上, gevent.core
接受Windows句柄而不是stdio文件描述符)。
用标准信号模块设置的信号处理程序不再被事件循环阻塞。
事件循环现在可以插入。gevent_loop环境变量可以指定要使用的替代类(默认为 gevent.core.loop
)
错误处理现在由hub.handle_error()完成。
通常杀死进程的系统错误(系统错误、系统退出、键盘中断)现在在主greenlet中重新出现。因此 sys.exit()
当运行在一个绿地不再被困,并按预期杀死过程。
新建DNS解析程序#
两个新的DNS解析程序:基于线程池的一个(默认启用)和基于C-ARES的一个。基于线程池的解析器主要是为Windows和Mac OS X平台添加的,在这些平台中,C-ares的行为可能与W.R.T系统配置有所不同。然而,在Linux上,基于C-ARES的解析器可能是更好的选择。要启用C-ARES解析器,请设置gevent_resolver=ARES环境变量。
这修复了0.13.x上的DNS的一些主要问题,即:
Issue #2: DNS resolver no longer breaks after
fork()
. You still need to callgevent.fork()
(os.fork
is monkey patched with it ifmonkey.patch_all()
was called).DNS解析程序不再忽略
/etc/resolv.conf
和/etc/hosts
.
以下功能已添加到插座模块:
gethostbyname_ex
GETNAMEFIN信息
获取主机地址
获取fqdn
它可以实现您自己的DNS解析程序并使gevent使用它。gevent_resolver变量可以使用以下格式指向替代实现: package.module.class
. 默认值为 gevent.resolver_thread.Resolver
. 替代的“战神”分解器是 gevent.resolver_ares.Resolver
.
新API#
udp服务器:gevent.server.datagramserver
子流程支持
新的
gevent.subprocess
协同实现标准子流程模块的接口。可以使用patch_all(subprocess=True)
(默认情况下不执行)。线程池
警告: 此功能是实验性的,应小心使用。
这个
gevent.threadpool
模块提供了通常的池方法(apply、map、imap等),但在实际的OS线程中运行传递的函数。有一个默认的线程池,可用为
gevent.get_hub().threadpool
.
正在中断更改#
删除的功能#
gevent.dns模块(围绕libevent dns的包装)
gevent.http模块(围绕libevent http的包装)
util.lazy_property
财产。已弃用的gevent.sslold模块
已弃用的gevent.rawgreenlet模块
不推荐使用的名称
GreenletSet
它以前是的别名Group
.链接到greenlet的greenlet功能
未记录的bind_and_listen和tcp_listener
已将gevent.coros重命名为gevent.lock。gevent.coros仍然可用,但已弃用。
API更改#
在所有服务器中,方法“kill”被重命名为“close”。旧名称可用作已弃用的别名。
Queue(0)
现在等价于未绑定的队列并引发DeprecationError
. 使用gevent.queue.Channel
如果你需要一个频道。
这个 gevent.Greenlet
物体:
错误修正#
问题302:“python-m gevent.monkey”现在设置 __file__ 正确。
问题143:Greenlet链接现在按添加的顺序执行
修正了monkey.patch_thread()来修补线程。_dummethread以避免线程泄漏。_active。
线程:allocate_lock现在是locktype/信号量的别名。这样,当用作类成员时它不会失败。
现在可以在游泳池里加入生的小菜了。
这个
map()
和imap()
方法现在开始尽快生成结果。这个
imap_unordered()
不再吞咽在迭代其参数时引发的异常。gevent.sleep(<negative value>)
不再引发异常,而是引发异常sleep(0)
.这个
WSGIServer
现在集max_accept
至1如果wsgi.multiprocessing
设置为True
.补充
monkey.patch_module()
Monkey补丁模块使用的功能__implements__
list provided by gevent module. All of gevent modules that replace stdlib module now have `_ _实现属性。
皮夫斯基:
在Unix套接字上绑定时修复日志记录(295)。
读取请求数据以防止EconnReset
修复79:正确处理HTTP版本。
修复86:现在支持bytearray。
修复92:在截断的POST请求上引发IOERROR。
修正93:不发送多个“100继续”响应
修复116:多行HTTP头现在被正确处理。
修复216:传播pool.map/imap引发的错误
修复pywsgi中的“requestline”attributeError。
如果将非零内容长度传递给Start_Response(204/304),或者尝试为304/204响应写入非空正文,则引发断言错误。
如果尚未设置“status”属性,请确保格式_request()不会失败。
已将远程端口变量添加到环境中。
已从wsgihandler中删除未使用的不推荐使用的“wfile”属性