修复lifoqueue.peek()以返回正确的元素。 pull request #456 . 由Christine Spang修补。
升级至libev 4.19
完全删除ssl3作为默认的tls协议
在Windows上导入套接字(关闭 issue #459 )
修复c90语法错误 (pull request #449 )
添加与Python2.7.9的SSL更改的兼容性。 issue #477 .
固定 issue #423 :池的imap/imap无序可能永远挂起。基于王建飞的补丁和测试。
pywsgi:传递错误列表的副本,而不是直接引用。感谢Jonathan Kamens,Matt Iversen。
忽略自动生成的doc/gevent.*.rst文件。马蒂亚斯·乌里希斯的补丁。
在窗户上安装cythonpp.py。Jeryn Mathew的补丁。
移除gevent.run(使用gevent.wait)。
固定 issue #251 :访问损坏的循环时gevent.core崩溃。
固定 issue #235 :将hub.py中的self.threadpool.close()替换为self.threadpool.kill()。Jan Philip Gehrcke的补丁。
从select.py中删除未使用的超时 (issue #254 )。由sa_l ibarra corretg_修补。
将greenlet.link()的参数重命名为“callback”(关闭 issue #244 )
修复并行构建 (issue #193 )。由Yichao Yu修补。
固定 issue #263 :gevent.pywsgi中可能存在unboundlocalerror:“length”。
简化psycopg2_pool.py (issue #239 )。亚历克斯·加诺的补丁。
pywsgi:在get请求中允许内容长度 (issue #264 )。陈小玉补。
文档修复 (issue #281 ) [飞利浦康拉德] .
修复有关kill、killall的默认阻止行为的旧文档 (issue #306 )。丹尼尔·法里纳的补丁。
固定 issue #6 :在线程后修补sys。安东·帕特鲁舍夫的补丁。
子进程:修复py2.6及更低版本上的check_输出 (issue #265 )。感谢马克西布森的测试。
固定 issue #302 :“python-m gevent.monkey”现在设置 __file__
正确。
pywsgi:在Unix套接字上绑定时修复日志记录 (issue #295 )。感谢克里斯·梅耶斯,尤金·潘科夫。
pywsgi:读取请求数据以防止econnreset
固定 issue #303 :pywsgi中的“requestline”attributeError。感谢尼尔·钦托比。
固定 issue #79 :正确处理HTTP版本。Luca Wehrstedt的补丁。
固定 issue #216 :传播pool.map/imap引发的错误
固定的 issue #210 :没有为非默认循环运行回调(1.0rc1中引入的bug)。
patch_all()不再修补子进程,除非 subprocess=True
通过。
已修复hub.waiter中的属性错误。
固定的 issue #181 :使隐藏导入对冻结工具(如py2exe)可见。由拉尔夫施密特修补。
固定的 issue #202 :运行回调时定期返回(sleep(0)现在无法阻塞事件循环)。
固定的 issue #204 :os.tp_read/tp_write没有向调用方提供错误。
固定的 issue #217 :不要在Windows上设置此地址。
修正了gevent.monkey的模块参数中的错误。_RJAN PERSSON修补。
删除threadpool.py中有关混合叉()和线程的警告。
从支持旧greenlet所需的代码中清除了hub.py。由sa_l ibarra corretg_修补。
允许通过 get_hub(default=True)
. Jan Philip Gehrcke的补丁。
固定的hub.switch()在切换时不触摸stacktrace。greenlet正确还原0.3.2版之后的异常信息。GEvent现在需要greenlet>=0.3.2
添加了gevent.wait()和gevent.iwait()。这类似于gevent.joinall(),但支持更多对象,包括greenlet、event、semaphore和popen。如果没有参数,它将等待事件循环完成(以前的gevent.run()就是这样做的)。在最终发布之前将删除gevent.run,并且gevent.joinAll()可能会被弃用。
使用一个列表和一个Prepare Watcher重新实现loop.run_回调;这可以修复生成顺序并稍微提高性能。
修复信号量/锁不到中的init hub __init__
这样就可以在不初始化集线器的情况下拥有模块全局锁。这将修复monkey.patch_all()而不是初始化集线器。
按添加顺序执行回调的新实现。core.loop.callback已删除。
固定的2.5兼容性。
修复了请求“stat”观察程序的“prev”和“attr”属性时Windows崩溃的问题。属性访问仍然失败,但现在出现异常。
添加了已知的_failures.txt,列出了所有失败的测试。它可以通过预期的选项由testranner.py使用。它用于在Travis中运行测试套件。
修正了socket、ssl和fileobject以不掩盖ebadf错误-它现在被提供给调用者。以前,EBADF被转换为空读/写。多亏了维塔利·克鲁格利科夫
已删除gevent.event.waitall()。
重命名的fileObjectThreadpool->fileObjectThread
格林莱特:固定 issue #143 :greenlet链接现在按添加的顺序执行。
使用信号量同步对FileObjectThread的访问
在FileObject中不再处理einval。
猴子:
固定的 issue #178 :禁用monkey补丁os.read/os.write
修正了monkey.patch_thread()来修补线程。_dummethread以避免线程泄漏。_active。Wil Tan的原始补丁。
为patch_all()和patch_线程添加了event=false参数
添加了patch_sys(),它用fileObjectThread包装器来修补stdin、stdout和stderr。实验/马车。
猴子修补所有东西不再初始化中心/事件循环。
Socket:
创建连接:如果不支持IPv6,请不要查找IPv6地址。由拉尔夫施密特修补。
皮夫斯基:
固定的 issue #86 :现在支持bytearray。Aaron Westendorf的原始补丁。
固定的 issue #116 :多行HTTP头现在处理正确。由拉尔夫施密特修补。
子过程:
修复了Windows兼容性。wait()方法现在还支持Windows上的“timeout”参数。
popen:添加了rawlink()方法,使gevent.wait()支持popen对象。更新的示例/流程.py
固定的 issue #148 :从errpipe读取以小块读取,以避免在Mac OS X上触发einval问题。
在“finally”部分执行os.exit(),以避免执行不相关的代码。Vitaly Kruglikov的补丁。
分解器:
改进getaddrinfo:对于字符串端口(例如“http”)来说,resolver_ares/getaddrinfo以前只检查过getservbyname(port,“tcp”)或getservbyname(port,”udp”),但从来没有检查过两者。现在检查两个。
gevent.ares.channel现在接受字符串作为参数
升级c-ares至cares-1_9_1-12-g805c736
现在可以使用环境直接配置解析器,如geventares服务器。
操作系统:
已将threadpool_读/写重命名为tp_读/写。
删除了posix-read和posix-write。
添加nb_read、nb_write、make_nonblocking。
集线器:
在所有情况下,系统错误都会立即在主greenlet中出现。
放弃对旧greenlet版本的支持(现在需要大于等于0.3.2)
核心:
允许将观察程序的“callback”属性设置为“none”。del w.callback“不再工作。
添加了缺少的“nonotify”标志
MISC:
线程:allocate_lock现在是locktype/信号量的别名。这样,当用作类成员时它不会失败。
更新greentest.py以开始超时 ref=False
.
pool:删除未使用的get_values()函数
setup.py现在识别geventsetup_ev_verify env var,该变量在编译时设置ev_verify宏
增加了一些微观基准
我们关心的stdlib测试现在包含在greenttest/2.x目录中,因此我们不依赖于它们在系统范围内的安装。
更新了util/makedist.py
测试运行程序被完全重写。
添加了带有“读”和“写”功能的gevent.os模块。Geert Jansen的补丁。
将gevent.hub.fork移动到gevent.os模块(它仍可用作gevent.fork)。
固定的 issue #148 :made fileobject句柄einval,由mac os x上的os.read/os.write随机引发。多亏了mark hingston。
固定的 issue #150 :gevent.fileobject.socketadapter.sendall()可能不必要地等待描述符上的写入事件。马克·辛斯顿的原版补丁。
修复了baseserver中的attributeError。如果出现错误,start()将调用kill(),并将其重命名为close()。多亏了维塔利·克鲁格利科夫。
新建gevent.subprocess模块
新建gevent.fileobject模块
修复了threadpool以尽快丢弃传递给它的对象(函数、参数)的引用。以前,它们可以无限期地存储,直到线程得到一个新的作业。
固定的 issue #138 :gevent.pool.pool().imap无序挂起,迭代器为空。多亏了Exproxus。
固定的 issue #127 :ssl.py在某些情况下可能引发类型错误。感谢Johan Mjones。
修正了socket.makefile()以保持socket实例的超时设置。感谢科林·马克。
已将“copy()”方法添加到队列中。
“nochild”事件循环配置选项已删除。安装符号提供了更灵活的方式来启用儿童观察者。
核心:除了'child'之外的所有观察程序现在接受新的'priority'关键字参数
超时接受新参数:“ref”和“priority”。超时的默认优先级是-1。
hub.wait()现在使用waiter而不是原始切换
将libev更新为最新的cvs版本
如果将非零内容长度传递给start_-response(204/304),或者如果试图为304/204响应写入非空正文,则生成pywsgi以引发断言错误。
删除了pywsgi功能,以便将传递的头大写。
固定的util/cythonpp.py用于python3.2 (issue #123 )。Alexandre Kandalintsev的补丁。
已将“closed”只读属性添加到套接字。
已将“ref”读/写属性添加到套接字。
除了嵌入,setup.py现在解析关心嵌入和libev嵌入参数。
gevent.reinit()和gevent.fork()仅在创建了reinit hub而不是自己创建时才创建它
修正了不添加libev和c-ares的setup.py,在非嵌入模式下包含dir。由拉尔夫施密特修补。
已将util/make-dist.py重命名为util/makedist.py
testranner.py现在可以保存关于系统的更多信息;stat打印功能将移动到单独的util/stat.py脚本中。
主要和向后不兼容的更改:
已将基于线程池的冲突解决程序设为默认值。要启用基于战神的分解器,请设置gevent_resolver=ares env var。
添加了对儿童观察者的支持(在Windows上不可用)。
libev循环现在默认获取所有子循环。
如果将nochild标志传递给循环,则禁用子观察程序和子收获。
已将gevent.coros重命名为gevent.lock。gevent.coros仍然可用,但已弃用。
向循环添加了“stat”观察程序。
现在,setup.py可以识别gevent_embed env var。当设置为“no”时,捆绑的c-ares和libev将被忽略。
向sleep()添加了可选的“ref”参数。当ref=false时,由sleep()创建的观察程序不保持gevent.run()退出。
线程池现在为工作线程中的异常调用hub.handle_错误。
ThreadPool得到了新的方法:应用。
添加了新的扩展模块gevent.u util并将gevent.core.setu excu info函数移到那里。
增加了新的扩展模块gevent._信号灯。它包含由gevent.lock作为gevent.lock.semaphore导入的信号量类。在扩展模块中提供信号量可确保在 __exit__. 感谢拉尔夫·施密特。
现在可以通过设置线程池的“大小”属性来终止或预生成线程。
核心:
确保默认循环不能被破坏多次,从而导致进程崩溃。
make hub.destroy()方法不销毁默认循环,除非 destroy_loop 是 True . 默认情况下,非默认循环仍会被销毁。
循环:已从循环中删除属性:fdchangecnt、timercnt、asynccnt。
循环:添加的属性:sigfd、origflags、origflags_int
循环:evflag eu noenv现在总是传递给libev。因此,不再检查libev_flags env变量。使用gevent_后端。
MISC:
检查link()的参数是否可调用。否则引发typeerror。
修复了分析地址时BaseServer中的类型错误。
池:使外部用户可以使用add()和discard()。多亏了丹尼尔·埃雷米耶夫。
指定要导入的类时,现在可以使用格式path/package.module.name
pywsgi:如果尚未设置“status”属性,请确保格式化请求()不会失败。
pywsgi:向环境中添加了远程端口变量。
实例:
现在,portForwarder.py演示了如何使用gevent.run()实现服务器的正常关闭。
psycopg2_pool.py:已将execute()更改为返回行数。
psycopg2_pool.py:添加了fetchall()和fetchiter()方法。
开发工具:
构建时,可以使用cython env变量指定要使用的cython可执行文件。
util/make-dist.py现在可以恢复——快速和——恢复选项。上一个--rsync选项被删除。
添加了util/winvbox.py,它可以在WindowsVM上自动生成/测试/生成二进制文件。
修复了testranner.py中异常处理代码的拼写错误
在python2.7上固定修补单元test.runner。这导致测试用例运行的细节丢失。
在测试完成后,使testranner.py终止整个进程组。
向后不兼容的更改:
删除了greenlet的“链接到greenlet”功能。
如果使用大于0.3.2的Greenlet模块,则 greenlet.GreenletExit.__bases__ 是否修补了monkey以从baseexception派生而非exception。这样,无论安装的greenlet版本如何,gevent.greenletexit始终从baseexception派生。
已经删除了一些支持python 2.4的代码。
发布亮点:
添加线程池:gevent.thread pool.threadpool。
添加了基于线程池的冲突解决程序。启用gevent_resolver=thread。
添加了udp服务器:gevent.server.datagramserver
现在在libev上运行“configure”。这解决了Mac OS X上“kqueue”不可用的问题。
GEvent现在识别了一些环境变量:
gevent_backend允许将参数传递给循环,例如,对于force select backend,“gevent_backend=select”
gevent_resolver允许选择resolver类。
gevent_thread pool允许选择线程池类。
新增示例:portforwarder、psycopg2_pool.py、threadpool.py、udp_server.py
修复了非嵌入生成。要根据系统libev生成,请删除或重命名“libev”目录。要根据系统C-ARES进行构建,请删除或重命名“C-ARES”。多亏了扬·佩尔森。
MISC:
gevent.joinAll()方法现在接受可选的“count”关键字。
现在只在子进程中调用reinit()。
现在,由于超时或事件(以前为无),退出时gevent.run()返回false。
Hub得到了一个新方法:destroy()。
Hub获得了一个新属性:threadpool。
战神.pyx:
固定的 issue #104 :使战神的主机结果可供选择。感谢肖恩·卡特。
皮夫斯基:
已从wsgihandler中删除未使用的不推荐使用的“wfile”属性
固定的 issue #92 :在截断的POST请求上引发IOERROR。
固定的 issue #93 :不要发送多个“100继续”响应
核心:
固定的 issue #97 :计时器观察程序现在在start()中调用ev_now_update(),然后再次调用ev_update(),除非传递了'update'关键字并将其设置为false。
添加set_syserr_cb()函数;它由gevent内部使用。
gevent现在使用libev的set_syserr_cb安装syserr回调。当libev遇到无法恢复的错误时,调用此回调。默认操作是打印消息并中止。安装回调后,现在在主greenlet中引发SystemError()。
已将“backend_fd”属性重命名为“fileno()”方法。(如果针对系统libev构建gevent,则不可用)
添加了“asynccnt”属性(如果针对系统libev生成gevent,则不可用)
制造的 loop.__repr__ 输出更紧凑一点
观察者现在检查参数是否有效(以前无效的参数会使libev崩溃)。
“async”观察程序现在有send()方法;
固定时间()函数
libev已经升级到最新的cvs版本。
当libev_vfd.h生效时,libev已被修补为在Windows上对evpipe使用send()/recv()。
分解器:
在某些错误情况下稍微改进了与stdlib套接字的兼容性。
Socket:
fixed close()方法不引用任何全局
固定的 issue #115 :_dummy获得意外的超时参数
删除了用于在socket.py中兼容python 2.4的文件对象
固定的 issue #94 :如果memoryview在python 2.7的get内存中失败,则返回缓冲区
猴子:
已删除修补程序httplib()
固定的 issue #112 :线程。_睡眠没有修补。多亏了大卫·拉比森尼尔。
添加了get_unpatched()函数。不过,目前它有点破损。
后门:
使“locals()”不溢出 __builtin__.__dict__ 在后门
向后门服务器添加可选横幅参数
服务器:
添加server.datagramserver;
streamserver:“ssl_enabled”现在是只读属性
服务器不再具有“kill”方法;已将其重命名为“close”。
现在可以将侦听器配置为字符串,例如“80”或“80”
修改baseserver.baseserver,使其成为streamserver和datagramserver的好基类
BaseServer不再接受“backlog”参数。现在由streamserver完成。
BaseServer实现start_accepting()和stop_accepting()方法
BaseServer现在实施“暂时停止接受”策略
BaseServer现在有一个读取方法,它可以执行除实际调用accept()/recvFrom()之外的所有操作。
pre_start()方法被重命名为init_socket()。
已将“停止”事件重命名为“停止”事件
“started”现在是只读属性(它实际上报告了“stop”事件的状态)
删除post_Stop()方法
close()现在将_stop_event()设置为false,从而使serve_forever()退出
_ tcp_listener()函数从baseserver.py移动到server.py
添加了“致命错误”类属性,它是所有应杀死服务器的errnos的元组。
coros:
信号量:add _start _notify()方法
信号量:避免复制链接列表;rawlink()不再计划通知
已将“ref”属性添加到所有观察程序。将其设置为“假”,使观察程序适当地调用ev-unref/ev-ref,这样该观察程序就不会阻止loop.run()/hub.join()/run()退出。使冲突解决程序使用内部观察程序的“ref”属性。
在所有服务器中,方法“kill”被重命名为“close”。旧名称可用作已弃用的别名。
向循环添加了一些属性:backend_fd、fdchangecnt、timercnt。
将c-ares升级到1.7.5+补丁。
修正了getaddrinfo返回结果的顺序(::1,ipv4,ipv6)。
修正了getaddrinfo()来处理字符串类型的整数。多亏了科诺。
已将gethostbyname()修复为处理“”(空字符串)。
修正了getAddrInfo()将unicodeEncodeError转换为错误(“应为int或string”)。
固定的getaddrinfo()使用与内置套接字类似的最低16位传递端口整数。
修正了getnameinfo()调用getaddrinfo()来处理类似于内置套接字的参数。
已修复gethostbyddr()以使用getaddrinfo()处理参数。
版本信息现在是5元组。
将handle_system_error()方法添加到hub(内部使用)。
修复了hub的run()方法以永不退出。这可以防止不适当地转换为父greenlet。
修复了hub.join()以返回true(如果hub已经死了)。
已将“event”参数添加到hub.join()。
补充 run()
Gevent顶层包的功能。
修正了greenlet.start()在greenlet已经启动而不是提升时自动退出 AssertionError
.
修正了greenlet.start()在greenlet已经死的情况下不调度另一个开关。
修正了gevent.signal()生成greenlet而不是原始greenlet。此外,它将立即切换到新的greenlet,而不是安排额外的回调。
Do Monkey Patch create_connection(),因为gevent的版本比标准的create_connection更适合gevent.socket.socket。
Pywsgi:如果套接字操作因epipe而失败,请确保我们不会尝试读取更多请求。
Pywsgi:如果我们未能发送回复,请将“status”更改为socket error,以便日志中提到该错误。
修复了gevent.queue.channel类中的错误。(多亏了亚历克赛·博泽科夫)
向后不兼容的更改:
放弃了对python 2.4的支持。
Queue(0)
现在等价于未绑定的队列并引发 DeprecationError
. 使用 gevent.queue.Channel
如果你需要一个频道。
不推荐将greenlet实例传递给 Greenlet.link()
, Greenlet.link_value()
和 Greenlet.link_exception()
.
所有的 gevent.core
已重写,接口不兼容。
SystemExit
和 SystemError
现在停止整个过程而不是打印一个回溯。
已删除,已弃用 util.lazy_property
财产。
远离的 gevent.dns
模块。
已删除不推荐使用的gevent.sslold模块
已删除已弃用的gevent.rawgreenlet模块
删除了不推荐的名称 GreenletSet
它以前是的别名 Group
.
gevent.wsgi
现在是的不推荐使用的别名 gevent.pywsgi
.
发布亮点:
这个 gevent.core
模块现在包装了libev的API,与gevent 0.x不兼容。
增加了可插拔事件循环的概念。默认情况下,使用gevent.core.loop,它是libev的包装器。
添加了可插拔名称解析程序的概念。默认情况下,使用基于C-ARES库的解析器。
增加了对多个操作系统线程的支持,每个新线程都将使用自己的事件循环获得自己的中心实例。
该版本现在包含并嵌入了依赖项:libev和c-ares。
标准 signal
现在按预期工作。
未处理的错误现在由统一处理 Hub.handle_error
功能。
补充 gevent.queue.Channel
类到 gevent.queue
模块。它相当于 Queue(0)
在gevent 0.x中,现在已弃用。
添加的方法 peek
到 gevent.queue.Queue
班级。
补充 idle
在事件循环空闲之前阻塞的函数。
通过等待所有未完成的greenlet/servers/watcher,添加了一种优雅地关闭应用程序的方法: Hub.join
.
新增 gevent.ares
C延长线 c-ares
并提供异步DNS解析程序。
新增 gevent.resolver_ares
模块在 gevent.ares
.
这个 gevent.socket
模块:
dns函数现在使用c-ares库而不是libevent dns。这修复了名称解析的一些问题:
Fix issue #2: DNS resolver no longer breaks after fork()
. You
still need to call gevent.fork()
(os.fork
is monkey
patched with it if monkey.patch_all()
was called).
DNS解析程序不再忽略 /etc/resolv.conf
和 /etc/hosts
.
以下功能已添加到插座模块中
gethostbyname_ex
GETNAMEFIN信息
获取主机地址
获取fqdn
删除了未记录的bind_和_listen以及tcp_listener
这个 gevent.hub.Hub
对象:
补充 join
方法,等待事件循环退出或可选超时过期。
补充 wait
方法,该方法等待观察程序获取事件。
补充 handle_error
方法,在发生未处理的异常时由所有gevent调用。
补充 print_exception
由调用的方法 handle_error
打印异常跟踪。
这个 Greenlet
物体:
补充 __nonzero__
返回的实现 True
在格林莱特被启动到死后。以前格林莱特是 False
之后 start()
直到第一次切换到。
这个 gevent.pool
模块:
现在可以在游泳池里加入生的小菜了。
这个 map
和 imap
方法现在开始尽快生成结果。
这个 imap_unordered
不再吞咽在迭代其参数时引发的异常。
其他:
gevent.sleep(<negative value>)
不再引发异常,而是引发异常 sleep(0)
.
添加的方法 clear
到内部 Waiter
班级。
远离的 wait
来自内部的方法 Waiter
班级。
这个 WSGIServer
现在集 max_accept
至1如果 wsgi.multiprocessing
设置为 True
`
补充 gevent.monkey.patch_module()
Monkey补丁模块使用的功能 __implements__
GEvent模块提供的清单。所有替换stdlib模块的gevent模块现在都有 __implements__
属性。
Next page: Gevent 1.0之前的更改