固定的 issue #80 :gevent.httplib因超时被tomasz prus重置为1s.patch而失败,并出现requestfailed错误。
核心:用最新的cython修复编译:移除emit-ifdef/emit-else/emit-endif。
固定的 issue #132 :gevent.socket.gethostbyname(<unicode>)现在执行ASCII编码并使用gevent的冲突解决程序,而不是调用内置冲突解决程序。亚历克赛·博泽科夫的补丁。
固定的 issue #94 :如果memoryview在python 2.7的get内存中失败,则返回缓冲区。
固定的 issue #103 : Queue(None).full()
收益率 False
现在(以前它返回 True
)
固定的 issue #112 :线程。_睡眠没有修补。多亏了大卫·拉比森尼尔。
固定的 issue #115 :_dummy获得意外的超时参数。
补充 __copy__
方法到 gevent.local.local
实现与内置程序兼容的复制语义的类 threading.local
. 修补者 高尔菲·邦迪 .
固定的 StreamServer
要捕获的类 EWOULDBLOCK
而不是 EAGAIN
. 这修复了Windows上许多虚假的回溯,其中这两个常量不相同。修补者 亚历克赛·博岑科夫 .
固定的 issue #65 : fork()
现在电话 event_reinit
仅在子进程中;否则,使用libevent2时进程可能挂起。修补者 亚历山大·布德卡尔 .
修复了python 2.5上的构建问题
固定的 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
类属性。
如果绑定失败,服务器现在会在错误消息中包含导致绑定失败的地址。
固定打字错误 gevent.httplib
这使得它无法使用。
消除不必要的延迟 getaddrinfo
通过呼叫 resolve_ipv4
和 resolve_ipv6
同时而不是按顺序 AF_UNSPEC
案例。
补充 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__
属性已设置或删除。
发布亮点:
固定的 monkey
修补 socket.create_connection
.
更新的 gevent.ssl
模块完全匹配 ssl
在python 2.7上。
Fixed Group.join()
to handle raise_error=True
properly, it used to raise TypeError
(issue #36). Thanks to by David Hain.
固定的 gevent.wsgi
和 gevent.pywsgi
加入多个 Cookie
报头 (issue #40 )
固定的 select
识别 long
除 int
.
Fixed Semaphore.acquire()
to return False
when timeout expires instead of raising AssertionError
(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 .
发布亮点:
补充 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
补丁。
修复了将侦听套接字置于非阻塞模式的HTTP服务器。贡献者 拉尔夫·施密特 .
从分发中删除了一个符号链接(这会导致PIP失败)。多亏了 布拉德·克莱门茨 用于报告。
setup.py:自动从创建symlink build/lib.../gevent/core.so
到 gevent/core.so
.
gevent.socket
:改进了与stdlib套接字的兼容性:
发布亮点:
补充 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 马库斯·卡瓦诺 .
固定的 wsgi
取消引用 environ['PATH_INFO']
在传递到应用程序之前。
补充 SERVER_SOFTWARE
变量到 wsgi
环境。
固定错误 JoinableQueue.task_done()
导致 ValueError
在这里被错误地抬高。
固定的 gevent.socket
不要失败 ImportError
如果python不是用ssl支持构建的。
固定错误 select.select()
功能。传递用于导致此函数失败的写入描述符的非空列表。
将setup.py更改为继续编译,即使无法确定libevent的实际版本(在这种情况下假定为版本1.x.x)。
贡献者 路德维格·埃里克森 :
固定的 wsgi
的 start_response
识别 exc_info 参数。
修正了在达尔文平台上查找libevent.dylib而不是.
修正了超时错误 joinall()
, Greenlet.join()
, pool.Pool.join()
:如果超时已过期,则用于提升 Timeout
现在它安静地回来了。
固定的 signal()
在新greenlet中运行信号处理程序;它在 Hub
格林莱特之前。
固定的 Timeout.start_new()
:如果通过 Timeout
例如,它现在调用 start
方法。
固定的 gevent.monkey
修补 threading.local
正确。
固定的 Queue.empty()
and Queue.full()
to be compatible with the standard Queue
. It tried to take into account the greenlets currently blocking on get
/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。
改变 Timeout
API采用向后不兼容的方式: Timeout.__init__()
不再立即启动计时器; Timeout.start()
必须显式调用。快捷方式- Timeout.start_new()
-提供用于创建和启动 Timeout
.
补充 gevent.Greenlet
class which is a subclass of greenlet that adds a few useful methods join
/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
and AsyncResult
. Event
is a drop-in replacement for threading.Event
, supporting set
/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双内容长度头错误提供测试用例。
修复了 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,在上一版本中意外损坏。
简化 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
.
使用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
.
开始为 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库中的接口和约定。
Next page: 介绍