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=Trueproperly, 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 returnFalsewhen 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__.远离的
GreenSocketSocket类的别名。移动了基于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日)#
改变
TimeoutAPI采用向后不兼容的方式:Timeout.__init__()不再立即启动计时器;Timeout.start()必须显式调用。快捷方式-Timeout.start_new()-提供用于创建和启动Timeout.补充
gevent.Greenletclass 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.eventmodule with 2 classes:EventandAsyncResult.Eventis 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%的产卵时间。killS和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库中的接口和约定。