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 #103 :
Queue(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 #65 :
fork()
现在电话event_reinit
仅在子进程中;否则,使用libevent2时进程可能挂起。修补者 亚历山大·布德卡尔 .
0.13.5版(2011年4月21日)#
修复了python 2.5上的构建问题
0.13.4版(2011年4月11日)#
固定的
TypeError
发生在environ["wsgi.input"].read
使用整数参数调用了函数。固定的 issue #63 :
monkey.patch_thread()
现在补丁threading
同样,即使它已经被导入。修补者 肖林赛 .固定的 issue #64 :
joinall()
和killall()
如果参数包含重复的greenlet,则用于挂起的函数。固定的 issue #69 :
pywsgi.WSGIServer
如果客户端在最后一个请求后没有正常关闭连接,则报告“由对等方重置连接”。这样的错误现在被忽略了。固定的 issue #67 制成的
wsgi.WSGIServer
添加REQUEST_URI
到环境。修补者 安德烈亚斯·布利特 .固定的 issue #71 :猴子修补
httplib
具有gevent.httplib
用来打破HTTPSConnection
. 修补者 尼克·巴克斯 .固定的 issue #74 :
create_connection
现在引发适当的异常getaddrinfo
失败。固定的
BaseServer.__repr__()
方法,BaseServer.server_host
和BaseServer.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_ipv4
和resolve_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_unordered
到Pool
类。与以前的“虚拟”实现不同,这个实现一准备好就开始产生结果。在中实现了迭代器协议
Queue
. 主要的用例是Pool.imap_unordered()
.固定的
BaseServer.started
属性:现在设置为True
之后start
直到stop
或kill
. 以前它可能变成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 handleraise_error=True
properly, it used to raiseTypeError
(issue #36). Thanks to by David Hain.固定的
gevent.wsgi
和gevent.pywsgi
加入多个Cookie
报头 (issue #40 )固定的
select
识别long
除int
.Fixed
Semaphore.acquire()
to returnFalse
when timeout expires instead of raisingAssertionError
(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.send
和SSLSocket.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.wsgi
和gevent.pywsgi
彼此更相似。修复了使用libevent-2在Windows上编译的问题。
改进了Windows兼容性。固定的 issue #30 . 多亏了 路易吉·普格内蒂 .
修复了与python 2.7的兼容性。
向后不兼容的更改:
阻塞现在是
Greenlet.kill()
方法和其他杀戮方法。改变了
http.HTTPServer
以匹配其他服务器的接口。改变
Pool
的spawn()
方法阻塞直到有一个空闲的槽。已删除,已弃用
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.BackdoorServer
从StreamServer
而不是来自Greenlet
. 这增加了许多新功能,并删除了一些旧功能。删除非标准
balance
属性来自Semaphore
.远离的
start()
,set_cb()
和set_gencb()
从core.http
.远离的
set_closecb()
从core.http_connection
. 它现在在内部用于分离已关闭连接的请求。已弃用
rawgreenlet
模块。已弃用
util.lazy_property()
.更名
GreenletSet
到Group
. 旧名称当前可用作别名。
gevent.socket
模块:
进口
getfqdn()
从socket
模块。模块现在使用
sys.platform
检测窗口而不是platform
模块。固定的 issue #27 :
getaddrinfo()
用于处理案件时 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
班级。更名
HttpProtocol
到WSGIHandler
.通过允许可选参数
readline()
.
gevent.core
模块:
修复了参考泄漏
event
班级。访问ev时避免python名称查找_ 来自Cython代码的常量。修补者 丹尼尔·瓦拉佐 *.
补充 坚持 参数
read_event
,write_event
和readwrite_event
.使所有事件循环回调在退出前清除异常信息。
补充
flags_str
属性到event
. 它被__str__
和__repr__
.buffer
:补充
detach()
方法。实现了迭代器协议。
固定的
readline()
和readlines()
方法。
http_request
:固定的
detach()
分离输入和输出缓冲区。如果用户未发送响应,则将响应更改为释放时发送500错误。
制造
input_buffer
和output_buffer
存储并重新使用buffer
他们创建的对象。固定的
__str__()
方法:“在需要的地方加上空格。”http
类不再具有set_cb()
和set_gencb()
. 相反,其承包商接受 手柄 每次请求时都会调用。
gevent.http
和 gevent.wsgi
模块:
制造
HTTPServer
使用"Connection: close"
默认为标题。等级
HTTPServer
现在源于baseserver.BaseServer
. 因此start()
方法不再接受套接字侦听,必须将其传递给构造函数。这个 产卵 参数现在接受
Pool
实例。当池已满时,服务器将返回503错误。服务器不再链接到它生成的greenlet来检测错误。相反,它依赖于
http_request
如果用户没有发送任何回复,则释放时将发送500个回复。
其他:
改变
gevent.thread
使用Greenlet
而不是生菜。这意味着猴子修补线将成为Greenlet
也是。补充
started
属性到Greenlet
.放入通用服务器代码
gevent.baseserver
模块。gevent包中的所有服务器现在都派生自BaseServer
.从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
,帮助 baseserver
和 server
模块,改进setup.py和各种其他补丁和建议。
多亏了 乌列尔·卡茨 对于 pywsgi
补丁。
0.12.2版(2010年3月2日)#
修复了将侦听套接字置于非阻塞模式的HTTP服务器。贡献者 拉尔夫·施密特 .
0.12.1版(2010年2月26日)#
从分发中删除了一个符号链接(这会导致PIP失败)。多亏了 布拉德·克莱门茨 用于报告。
setup.py:自动从创建symlink
build/lib.../gevent/core.so
到gevent/core.so
.gevent.socket
:改进了与stdlib套接字的兼容性:
0.12.0版(2010年2月5日)#
发布亮点:
补充
gevent.ssl
模块。固定的Windows兼容性(实验)。
改进的性能
socket.recv()
,socket.send()
以及类似的方法。添加了一个新模块-
dns
-在libevent的DNS API周围使用同步包装器。补充
core.readwrite_event
和socket.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()
.补充
sslerror
到socket.__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)。
贡献者 路德维格·埃里克森 :
固定的
wsgi
的start_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()
andQueue.full()
to be compatible with the standardQueue
. It tried to take into account the greenlets currently blocking onget
/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.GreenSocket
到gevent.socket.socket
.GreenSocket
仍可用作别名,但将在将来删除。gevent.core
现在包括evbuffer、evdns、evhttp的包装器。重新命名旧的
gevent.wsgi
到gevent.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 methodsjoin
/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.pool
:apply
,map
以及其他。它也有spawn
方法,该方法始终异步并返回Greenlet
实例。补充
gevent.event
module with 2 classes:Event
andAsyncResult
.Event
is a drop-in replacement forthreading.Event
, supportingset
/wait
/``获取``方法。AsyncResult
是的扩展Event
支持通过set_exception
方法。补充
queue.JoinableQueue
上课用task_done
和join
方法。更名
core.read
和core.write
类到core.read_event
和core.write_event
.gevent.pywsgi
:拉动 迈克·巴顿的 修复双倍内容长度问题的eventlet修补程序。固定的
setup.py
搜索更多位置以安装系统libevent。这修复了64位CentOS 5.3的安装问题,希望也能覆盖其他平台。
以下项目已添加到GEvent顶层包中:
spawn_link()
spawn_link_value()
spawn_link_exception()
core
以下项目被标记为已弃用:
GEvent.proc模块 (
wrap_errors
帮助程序已移动到util
模块)gevent.coros.event
gevent.coros.queue和gevent.coros.channel
内部, gevent.greenlet
被拆分为多个模块:
gevent.hub
提供Hub
类和基本实用程序,如sleep()
;Hub
现在是greenlet的一个子类。gevent.timeout
提供Timeout
和with_timeout()
;gevent.rawgreenlet
包含的旧“轮询”版本joinall
和killall
(他们不需要link
通过轮询任何greenlet的状态并在一个循环中休眠,实现功能并与之合作)
多亏了 杰森·托法莱蒂 用于报告安装问题并为wsgi双内容长度头错误提供测试用例。
0.9.3版(2009年8月3日)#
修复了
gevent.queue
并使其与2.4兼容。LifoQueue
和PriorityQueue
也被执行。gevent.queue
都会贬低coros.Queue
和coros.Channel
.固定的
Timeout
默认地提升自己。TimeoutError
不见了。现在通过传递创建静默超时False
而不是None
.固定错误
gevent.select.select()
在那里它可以使错误的超时保持静音。spawn()
和spawn_later()
现在避免创建一个闭包,这将减少50%的产卵时间。kill
S和killall
的 wait 参数已重命名为 块 . 投票现在由greenlet.join
和greenlet.joinall
随着睡眠时间的逐渐增加,它变得更加灵敏。更名
proc.RunningProcSet
到proc.ProcSet
.补充
shutdown()
函数,在libevent完成事件调度之前阻塞。的返回值
event_add
和event_del
现在正确检查了core.pyx中的IOError
如果失败则引发。修复了backdoor.py,在上一版本中意外损坏。
0.9.2版(2009年7月20日)#
简化
gevent.socket
的实现和修复了由 塞萨尔·阿兰尼兹 以及test_socket_ssl.py
.远离的
GreenSocket.makeGreenFile
使用socket.socket.makefile()
它会回来_fileobject
两者都有GreenSocket
和GreenSSL
. 这个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/
目录)添加了布尔参数 wait 到
kill()
和killall()
功能。如果设置为True
,它将生成函数块,直到greenlet实际死亡。默认情况下,kill()
和killall()
是异步的,也就是说,他们不会临时安排当前的绿let。向添加了一些新属性
gevent.core.event
:fd
,events
,events_str
和flags
. 它也有__enter__
和__exit__
现在,它可以用作上下文管理器。event
的callback
签名已从更改(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.timeout
到gevent.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库中的接口和约定。