跳转到主要内容

Python 2上的asyncio模块(PEP 3156)已弃用,不再维护的端口

项目描述

Trollius

No Maintenance Intended

更改

2.2.1 (2021-04-28)

  • 正确地重新引发errno为EBADF的socket.error作为一个OSError。

2.2.post1 (2019-07-29)

这是一个仅包含打包的发布。它打算成为最后一个发布。

  • 为CPython 2.7发布Windows wheels。

  • 使用python_requires来限制安装到Python 2.7。

版本 2.2 (2018-03-09)

更改

版本 2.1(2016-02-05)

更改

  • Trollius项目现已弃用。

  • 为支持PEP 479的Python 3.5进行的不美观的hack。在Python 3.5上不支持asyncio协程。

  • 更好的异常跟踪。补丁由Dhawal Yogesh Bhanushali编写。

  • 停止支持Python 2.6和3.2。

  • 修复了在Windows上使用Python 2时的测试问题。补丁由Gabi Davar编写。

版本 2.0(2015-07-13)

摘要

  • 在Windows上使用Python 3.5及更高版本支持proactor事件循环的SSL

  • 在proactor事件循环中修复了许多竞争条件

  • Trollius迁移到GitHub,并将分支重构为基于asyncio git仓库的分支

  • 修复了许多资源泄漏(例如未关闭的套接字)

  • 套接字连接优化:避免:不要调用慢速的getaddrinfo()函数以确保地址已被解析。现在仅在调试模式下进行检查。

Trollius项目已从Bitbucket迁移到GitHub。该项目现在是asyncio项目(之前称为“tulip”项目)的分支,trollius源代码位于trollius分支中。

新的Trollius主页现在为: https://github.com/haypo/trollius

asyncio项目迁移到: https://github.com/python/asyncio

注意:PEP 492在trollius中尚不支持。

API更改

  • 问题 #234:在Python 3.5+上删除JoinableQueue

  • 添加asyncio.ensure_future()函数,之前称为async(). 现在async()函数已弃用。

  • 新的事件循环方法:set_task_factory()和get_task_factory().

  • Python问题 #23347:将BaseSubprocessTransport.wait()改为私有。

  • Python问题 #23347:BaseSubprocessTransport的send_signal()、kill()和terminate()方法现在会检查传输是否已关闭以及进程是否已退出。

  • Python问题 #23209、#23225:selectors.BaseSelector.get_key()现在在选择器关闭时引发RuntimeError。并且selectors.BaseSelector.close()现在清除其内部对选择器映射的引用以断开引用循环。初始补丁由Martin Richard编写。

  • asyncio.windows_utils的PipeHandle.fileno()在管道关闭时引发异常。

  • 从_overlapped模块中删除Overlapped.WaitNamedPipeAndConnect(),它不再使用并且存在问题。

  • Python问题 #23537:从BaseSubprocessTransport中删除2个未使用的私有方法:_make_write_subprocess_pipe_proto、_make_read_subprocess_pipe_proto。这些方法只会引发NotImplementedError且从未使用。

  • 删除未使用的SSLProtocol._closing属性

新的SSL实现

  • Python问题 #22560:在Python 3.5及更高版本中,使用基于ssl.MemoryBIO的新SSL实现而不是旧版SSL实现。补丁由Antoine Pitrou编写,基于Geert Jansen的工作。

  • 如果可用,新SSL实现可以通过ProactorEventLoop使用来支持SSL。

增强、修复和清理IocpProactor

  • Python问题 #23293:重写IocpProactor.connect_pipe(). 添加_overlapped.ConnectPipe(),它尝试异步I/O(重叠)连接到管道:循环调用CreateFile()直到它不会因为ERROR_PIPE_BUSY而失败。在1毫秒到100毫秒之间使用递增的延迟。

  • Tulip问题 #204:修复IocpProactor.accept_pipe(). Overlapped.ConnectNamedPipe()现在返回一个布尔值:如果管道连接成功(如果ConnectNamedPipe()因为ERROR_PIPE_CONNECTED而失败),则为True;如果连接正在进行,则为False。

  • Tulip问题 #204:修复IocpProactor.recv(). 如果ReadFile()因为ERROR_BROKEN_PIPE而失败,则操作不是挂起的:不要注册重叠。

  • Python问题 #23095:重写_WaitHandleFuture.cancel(). _WaitHandleFuture.cancel()现在等待直到等待被取消以清除对重叠对象的引用。为了等待直到取消完成,使用事件而不是UnregisterWait()使用UnregisterWaitEx().

  • Python问题 #23293:将IocpProactor.connect_pipe()重写为协程。使用asyncio.sleep()替代call_later()以确保计划中的调用被取消。

  • 修复ProactorEventLoop.start_serving_pipe()。如果服务器关闭前已连接客户端:丢弃客户端(关闭管道)并退出

  • Python问题#23293:清理IocpProactor.close()。connect_pipe()的特殊情况不再需要。connect_pipe()不再使用重叠操作。

  • IocpProactor.close():不要取消已取消的未来任务

  • 增强(修复)BaseProactorEventLoop._loop_self_reading()。正确处理CancelledError:直接退出。错误发生时,记录异常并退出;不要尝试关闭事件循环(不起作用)。

错误修复

  • 修复LifoQueue和PriorityQueue的put()和task_done()。

  • 问题#222:修复没有__name__属性的函数(如functools.partial())的@coroutine装饰器。如果协程函数是functools.partial(),也增强CoroWrapper的表示。

  • Python问题#23879:SelectorEventLoop.sock_connect()如果第一次调用connect()引发InterruptedError,则不得再次调用connect()。当C函数connect()因EINTR失败时,连接将在后台运行。我们必须等待直到套接字变为可写,以通知连接成功或失败。

  • 修复_event_loop关闭时__repr__(_SelectorTransport)。

  • 修复repr(BaseSubprocessTransport)如果它尚未启动。

  • 解决CPython问题#23353。在生成器的except块中不要使用yield/yield-from。存储异常并在except块外处理。

  • 修复BaseSelectorEventLoop._accept_connection()。错误发生时关闭传输。在调试模式下,使用call_exception_handler()记录错误。

  • 修复_SelectorReadPipeTransport和_SelectorWritePipeTransport。仅在connection_made()被调用后开始读取。

  • 修复 SelectorSslTransport.close()。如果尚未调用protocol.connection_made(),则不要调用protocol.connection_lost():如果SSL握手失败或仍在进行中。如果创建连接被取消,例如由超时引起,可以调用close()方法。

  • 修复 SelectorDatagramTransport 构造函数。仅在connection_made()被调用后开始读取。

  • 修复 SelectorSocketTransport 构造函数。仅在connection_made()被调用时开始读取:protocol.data_received()必须在protocol.connection_made()之前调用。

  • 修复 SSLProtocol.eof_received()。如果等待者尚未完成,唤醒它。

  • 错误发生时关闭传输。修复 create_datagram_endpoint()、connect_read_pipe() 和 connect_write_pipe():如果任务被取消或发生错误,则关闭传输。

  • 在子进程创建失败时关闭传输

  • 修复 _ProactorBasePipeTransport.close()。在取消后,将_read_fut属性设置为None。

  • Python问题#23243:修复 _UnixWritePipeTransport.close()。如果传输已关闭,则不执行任何操作。之前无法两次关闭传输。

  • Python问题#23242:SubprocessStreamProtocol现在在子进程退出时关闭子进程传输。清除对传输的引用。

  • 修复 BaseEventLoop._create_connection_transport()。如果传输创建(如果等待者)引发异常,则关闭传输。

  • Python问题#23197:在SSL握手失败时,在设置其异常之前检查等待者是否已取消。

  • Python问题#23173:修复SubprocessStreamProtocol.connection_made()以处理已取消的等待者。

  • Python问题#23173:如果在创建子进程期间抛出异常,则终止子进程(关闭管道、终止并读取返回状态)。在这种情况下记录错误。

  • Python问题#23209:在asyncio中打破一些引用循环。补丁由Martin Richard编写。

优化

  • 仅在调试模式下调用_check_resolved_address()。_check_resolved_address()使用getaddrinfo()实现,速度较慢。如果可用,使用socket.inet_pton()代替socket.getaddrinfo(),因为它要快得多。

其他更改

  • Python问题#23456:添加缺失的@coroutine装饰器

  • Python问题#23475:修复test_close_kill_running()。真正杀死子进程,不要完全模拟Popen.kill()方法。此更改修复了内存泄漏和引用泄漏。

  • BaseSubprocessTransport: repr() 提示子进程正在运行

  • BaseSubprocessTransport.close() 如果进程已经结束,则不会尝试杀死进程。

  • Tulip 问题 #221:修复 QueueEmpty 和 QueueFull 的文档字符串

  • 修复 subprocess_attach_write_pipe 示例。关闭传输,而不是直接关闭管道。

  • Python 问题 #23347:send_signal()、terminate()、kill() 在没有检查传输是否关闭的情况下执行。这破坏了 Tulip 示例,并且这种限制是任意的。应该检查 _proc 是否为 None。增强 close():如果第二次被调用则不执行任何操作。

  • Python 问题 #23347:重构子进程传输的创建。

  • Python 问题 #23243:在 Python 3.4 及更高版本中,如果事件循环或传输未明确关闭,则发出 ResourceWarning。

  • tox.ini:启用 ResourceWarning 警告

  • Python 问题 #23243:test_sslproto:显式关闭传输

  • SSL 传输现在清除对等待器的引用。

  • Python 问题 #23208:添加 BaseEventLoop._current_handle。在调试模式下,BaseEventLoop._run_once() 现在将 BaseEventLoop._current_handle 属性设置为当前正在执行的句柄。

  • 用 Python 3.5 适配的 asyncio 和 Python 3.3 的文件替换 test_selectors.py。

  • Tulip 问题 #184:FlowControlMixin 构造函数现在如果未设置 loop 参数,将获取事件循环。

  • _ProactorBasePipeTransport 现在在关闭传输时将 _sock 属性设置为 None。

  • Python 问题 #23219:取消 wait_for() 现在取消任务

  • Python 问题 #23243:在测试中显式关闭事件循环和传输

  • Python 问题 #23140:修复 Process.wait() 的取消。在设置其结果之前检查 waiter future 的状态。

  • Python 问题 #23046:在 asyncio 命名空间中公开 BaseEventLoop 类

  • Python 问题 #22926:在调试模式下,BaseEventLoop 的 call_soon()、call_at() 和 call_later() 方法现在使用当前线程的标识符以确保它们从运行事件循环的线程中调用。以前,使用 get_event_loop() 方法检查线程,并且当线程没有事件循环时不会引发异常。现在,在调试模式下,如果从错误的线程调用这些方法,方法总是引发异常。这应该有助于注意 API 的误用。

2014-12-19:版本 1.0.4

更改

  • Python 问题 #22922:create_task()、call_at()、call_soon()、call_soon_threadsafe() 和 run_in_executor() 现在如果事件循环已关闭则引发错误。初始补丁由 Torsten Landschoff 编写。

  • Python 问题 #22921:不要要求 OpenSSL SNI 将主机名传递给 ssl 函数。补丁由 Donald Stufft 提供。

  • 添加 run_aiotest.py:运行 aiotest 测试套件。

  • tox 现在也运行 aiotest 测试套件

  • Python 问题 #23074:get_event_loop() 现在如果线程没有事件循环则引发异常,即使禁用了断言。

错误修复

  • 修复 BaseSubprocessTransport._try_finish() 中的竞争条件:确保在 connection_lost() 调用之前调用 connection_made()。

  • Python 问题 #23009:selectors,确保 EpollSelecrtor.select() 在没有注册文件描述符时工作。

  • Python 问题 #22922:修复 ProactorEventLoop.close()。在设置 _closed 属性之前调用 _stop_accept_futures(),否则 call_soon() 会引发错误。

  • Python 问题 #22429:修复 EventLoop.run_until_complete(),如果引发 BaseException,则不要停止事件循环,因为事件循环已经停止。

  • 在类定义中初始化更多 Future 和 Task 属性,以避免析构函数中的属性错误。

  • Python 问题 #22685:在 SubprocessStreamProtocol 中设置 stdout 和 stderr StreamReader 对象的传输。这允许暂停传输以避免缓冲过多的 stdout 或 stderr 数据。

  • BaseSelectorEventLoop.close() 现在在调用父 close() 方法之前关闭 self-pipe。如果事件循环已经关闭,则不会从选择器中注销 self-pipe。

2014-10-20:版本 1.0.3

更改

  • 在 Python 2 的调试模式下,Future.set_exception() 现在除了异常对象外,还会存储异常的 traceback 对象。当一个任务等待另一个任务,并且该任务抛出异常时,现在会与异常一起复制 traceback 对象。请注意,存储 traceback 对象可能会创建引用泄漏。

  • 如果可用,请使用 ssl.create_default_context() 创建默认的 SSL 上下文:Python 2.7.9 及以上版本,或 Python 3.4 及以上版本。

  • 在 Python 3.5 及以上版本中,在 windows_utils 子模块中重用 socket.socketpair()。

  • 在 Python 3.4 及以上版本中,使用 os.set_inheritable()。

  • 增强协议表示:添加“已关闭”或“正在关闭”信息。

  • run_forever() 现在消耗临时任务的 BaseException。如果协程引发了 BaseException,则消耗异常以避免记录警告。调用者无法访问本地任务。

  • Python 问题 22448:清理 _run_once(),只迭代一次以移除已取消的延迟调用。

  • Return 类的析构函数现在显示 Return 对象的创建位置。

  • run_tests.py 在加载测试时不再捕获任何异常,只捕获 SkipTest。

  • 修复为未来 Python 2.7.9 的(SSL)测试,该版本包含一个“新”的 ssl 模块:从 Python 3.5 迁移的模块。

  • BaseEventLoop.add_signal_handler() 现在如果参数是协程函数,则会引发异常。

  • 以下函数现在通过 TypeError 拒绝协程函数和对象:add_signal_handler(),call_at(),call_later(),call_soon(),call_soon_threadsafe(),run_in_executor()。

2014-10-02:版本 1.0.2

此版本修复了错误。它还在调试模式下提供了更多关于错误的信息。

主要更改

  • Tulip 问题 #203:添加 _FlowControlMixin.get_write_buffer_limits() 方法。

  • Python 问题 #22063:SelectorEventLoop 的 socket 操作(socket,recv,sock_sendall,sock_connect,sock_accept)现在在调试模式下,如果套接字处于阻塞模式,则会引发异常。

主要错误修复

  • Tulip 问题 #205:修复 BaseSelectorEventLoop.sock_connect() 中的竞争条件。

  • Tulip 问题 #201:修复 wait_for() 中的竞争条件。如果在事件循环的同一次迭代中达到超时并且 future 已完成,则不要引发 TimeoutError。该错误的副作用是 Queue.get() 丢失项目。

  • PipeServer.close() 现在取消“接受管道”future,这将取消重叠操作。

其他更改

  • Python 问题 #22448:改进已取消计时器的回调处理清理。Joshua Moore-Oliva 的补丁。

  • Python 问题 #22369:将“上下文管理器协议”更改为“上下文管理协议”。Serhiy Storchaka 编写的补丁。

  • Tulip 问题 #206:在调试模式下,在取消()后,在 Handle 和 TimerHandle 的表示中保留回调。

  • Tulip 问题 #207:修复 test_tasks.test_env_var_debug() 以使用正确的 asyncio 模块。

  • runtests.py:显示消息,说明测试是在调试模式还是发布模式下运行

  • Tulip 问题 #200:在调试模式下记录错误,而不仅仅是忽略它们。

  • Tulip 问题 #200:_WaitHandleFuture._unregister_wait() 现在捕获并记录异常。

  • _UnixReadPipeTransport 和 _UnixWritePipeTransport 的 _fatal_error() 方法现在在调试模式下记录所有异常

  • 修复 BaseEventLoop.create_connection() 中的调试日志:从传输获取套接字对象,因为 SSL 传输关闭了旧套接字并创建了一个新的 SSL 套接字对象。

  • 删除 _SelectorSslTransport._rawsock 属性:它包含已关闭的套接字(不太有用)且未使用。

  • 修复 _SelectorTransport.__repr__(),如果传输已关闭

  • 如果可用,则使用 Python 3.5 的新 os.set_blocking() 函数

2014-07-30:版本 1.0.1

此版本支持 PyPy,并提供了更好的 asyncio 协程支持,尤其是在调试模式下。

更改

  • Tulip 问题 #198:asyncio.Condition 现在接受一个可选的锁对象。

  • 增强 Future 和 Future 子类的表示:添加“创建于”。

错误修复

  • 修复 Trollius 问题 #9:@trollius.coroutine 现在适用于可调用对象(没有 __name__ 属性),而不仅仅是函数。

  • 修复Trollius问题#13:现在所有函数都接受asyncio futures:as_completed(),async(),@coroutine,gather(),run_until_complete(),wrap_future()。

  • 修复调试模式下对asyncio协程的支持。如果协程的最后一个指令是“yield from”,则它是一个asyncio协程,无需使用From()。

  • 修复并增强_WaitHandleFuture.cancel()。

    • 郁金香问题#195:修复Windows上的崩溃:如果一个_WaitHandleFuture被取消两次,不要两次调用UnregisterWait()。

    • 修复_WaitHandleFuture.cancel():返回父cancel()方法的结果(True或False)。

    • _WaitHandleFuture.cancel()现在通过重叠对象通知IocpProactor等待已被取消。

  • 郁金香问题#196:_OverlappedFuture现在清除对重叠对象的引用。IocpProactor在接收到完成通知之前保留对重叠对象的引用。如果收到意外的通知,则在调试模式下记录错误。

  • 修复runtest.py以能够以DEBUG级别记录。

其他更改

  • BaseSelectorEventLoop._write_to_self()现在在调试模式下记录错误。

  • 修复as_completed():它不是一个协程,不要使用yield From(...),而是使用yield ...。

  • 郁金香问题#193:将StreamWriter.drain()转换为经典协程。

  • 郁金香问题#194:在单元测试中不要使用sys.getrefcount():完整的测试套现在在PyPy上通过。

2014-07-21:版本1.0

主要更改

  • 事件循环有一个新的create_task()方法,这是现在创建任务对象的首选方式。此方法可以被第三方事件循环覆盖,以使用它们自己的任务类。

  • 调试模式得到了大量改进。将TROLLIUSDEBUG环境变量设置为1,并配置日志以记录DEBUG级别(例如:logging.basicConfig(level=logging.DEBUG))。

    • 更好地表示Trollius对象(例如:repr(task)):统一<Class arg1 arg2 ...>格式,当可用时使用限定名。

    • 显示对象创建的堆栈跟踪。

    • 显示协程的当前文件名和行号。

    • 显示对象创建的文件名和行号。

    • 记录大多数重要的套接字事件。

    • 记录大多数重要的子进程事件。

  • Handle.cancel()现在清除对回调和args的引用。

  • 如果任务仍在挂起时被销毁,则记录错误,但仅限于Python 3.4及更高版本。

  • 修复调试模式下传递元组值时的asyncio协程。CoroWrapper.send()现在检查是否从“yield from”生成器调用,以决定是否应该解包参数。

  • Process.communicate()现在忽略BrokenPipeError和ConnectionResetError异常。

  • 在Python 3.3及更高版本上重写信号处理以修复竞争条件:使用“自管道”获取信号编号。

其他更改

  • 修复调试模式下的ProactorEventLoop()。

  • 修复设置Future结果的竞争条件:当使用call_soon()时。添加一个辅助器,一个私有方法,仅在future未被取消时设置结果。

  • 修复asyncio.__all__:还导出unix_events和windows_events符号。例如,在Windows上,使用from asyncio import *无法获取ProactorEventLoop或DefaultEventLoopPolicy。

  • Handle.cancel()现在清除对回调和args的引用。

  • 将Server属性和方法设置为私有,socket属性保持公开。

  • BaseEventLoop.create_datagram_endpoint()现在等待直到protocol.connection_made()被调用。还记录了为什么传输构造函数使用等待器。

  • _UnixSubprocessTransport:修复stdin的文件模式:以写入模式打开stdin,而不是以读取模式。

2014-06-23:版本0.4

Trollius 0.3和0.4之间的更改

  • 现在Trollius事件循环支持asyncio协程

    • Trollius协程可以产生asyncio协程,

    • asyncio协程可以产生Trollius协程,

    • asyncio.set_event_loop()接受Trollius事件循环,

    • asyncio.set_event_loop_policy()接受Trollius事件循环策略。

  • 环境变量PYTHONASYNCIODEBUG已被重命名为TROLLIUSDEBUG。现在即使在Python命令行选项-E被使用的情况下,环境变量也会被使用。

  • 与Tulip同步。

  • 支持PyPy(修复子进程,修复单元测试)。

Tulip变更

  • Tulip问题#171:BaseEventLoop.close()现在如果在事件循环正在运行时关闭,将引发异常。您必须首先停止事件循环,然后等待它停止,然后才能关闭它。

  • Tulip问题#172:仅在调试模式下记录选择器时间。

  • 当设置TROLLIUSDEBUG环境变量时,启用事件循环的调试模式。

  • BaseEventLoop._assert_is_current_event_loop()现在只有在当前循环被设置时才会引发异常。

  • Tulip问题#105:在调试模式下,记录执行时间超过100毫秒的回调。

  • Python问题21595:BaseSelectorEventLoop._read_from_self()从“self pipe”读取所有可用的字节,而不仅仅是单个字节。此更改降低了管道满并因此接收到“BlockingIOError: [Errno 11] 资源临时不可用”消息的风险。

  • Python问题21723:asyncio.Queue:支持任何类型的数字(例如:浮点数)作为最大大小。补丁由Vajrasky Kok编写。

  • 问题#173:增强repr(Handle)和repr(Task):添加文件名和行号(如果可用)。对于任务,使用协程的当前行号。

  • 添加BaseEventLoop.is_closed()方法。run_forever()和run_until_complete()方法现在如果事件循环已被关闭,将引发异常。

  • 确保socketpair()在错误时关闭套接字。如果sock.bind()引发异常,则关闭监听套接字。

  • 修复ResourceWarning:在错误时关闭套接字。BaseEventLoop.create_connection(),BaseEventLoop.create_datagram_endpoint()和_UnixSelectorEventLoop.create_unix_server()现在在错误时关闭新创建的套接字。

  • 重述和修复文档字符串。

  • 修复Windows上的测试:等待子进程退出。之前,regrtest失败地删除临时测试目录,因为进程仍在该目录中运行。

  • 重构单元测试。

在Python 3.5中,生成器现在从函数获取其名称,而不是从代码中获取。因此,@coroutine装饰器不再丢失函数的原始名称。

2014-05-26:版本0.3

将Python模块asyncio重命名为trollius以支持Python 3.4。在Python 3.4中,标准库中已经有一个名为asyncio的模块,它与Trollius 0.2的asyncio模块冲突。要编写在Trollius和Tulip上运行的asyncio代码,请使用import trollius as asyncio。

Trollius 0.2和0.3之间的变更

  • 与Tulip 3.4.1同步。

  • 增强Trollius文档。

  • Trollius问题#7:修复Windows上低于Vista的Windows版本的asyncio.time_monotonic。

  • Fedora软件包已被接受。

Tulip 3.4.0和3.4.1之间的变更

  • 通过Giampaolo Rodola(trollius.selectors模块)引入Solaris devpoll支持。

  • 向runtests.py添加选项-r和--randomize以随机化测试顺序。

  • 添加一个简单的回显客户端/服务器示例。

  • Tulip问题#166:向Handle和CoroWrapper添加__weakref__槽。

  • EventLoop.create_unix_server()现在如果在同时指定path和sock时将引发ValueError。

  • 确保在调试模式下,当前循环中调用 call_soon()call_later()call_at()。如果当前线程的事件循环与此不同,则引发一个 RuntimeError。此检查有助于调试线程安全问题。补丁由David Foster编写。

  • Tulip问题#157:改进test_events.py,避免使用不可靠的 run_briefly()

  • 当事件循环关闭时,拒绝添加/删除读取器/写入器。

Tulip 3.4.1的修复

  • Tulip问题#168:如果数据超出缓冲区限制,从管道读取 StreamReader.read(-1) 可能会挂起。

  • CPython问题#21447:修复 BaseEventLoop._write_to_self() 中的竞争条件。

  • trollius.coroutinesCoroWrapper 中修复不同的错误,这是在Trollius调试模式下运行的类。

    • 修复 CoroWrapper 以解决 CPython 3.4.0 中的 yield-from 错误。现在 CPython 3.4.1 和 3.5 已经修复了此错误。

    • 确保 CoroWrapper.send 正确代理一个参数。

    • CPython问题#21340:在 __del__ 中小心访问实例变量。

    • Tulip问题#163:向 CoroWrapper 添加 gi_{frame,running,code} 属性。

  • 修复 ResourceWarning 警告。

  • Tulip问题#159:修复 windows_utils.socketpair()。使用 "127.0.0.1"(IPv4)或 "::1"(IPv6)主机地址代替 "localhost",因为 "localhost" 可能是不同的IP地址。同时拒绝无效的参数:只支持 AF_INETAF_INET6SOCK_STREAM(和 proto=0)。

  • Tulip问题#158:如果引发异常,则 Task._step() 现在也将 self 设置为 None。将 self 设置为 None 以打破引用循环。

2014-03-04:版本 0.2

Trollius现在使用 yield From(...) 语法,这与Tulip的 yield from ... 非常相似,并允许更容易地将Trollius代码移植到Tulip。使用 From() 不是强制性的,但将来可能会成为强制性的。然而,如果没有使用 From 使用 yield,则在调试模式下运行的事件循环将引发异常。

主要更改

  • yield ... 语法替换为 yield From(...)

  • 在Python 2中,Future.set_exception() 现在仅在事件循环的调试模式启用以在生产模式下获得最佳性能时保存跟踪信息。使用 loop.set_debug(True) 来保存跟踪信息。

错误修复

  • 在Python 2上修复 BaseEventLoop.default_exception_handler():从 sys.exc_info() 获取跟踪信息。

  • 修复Python 2.6.6之前版本中SSL套接字的单元测试。例如:Mac OS 10.6与Python 2.6.1或OpenIndiana 148与Python 2.6.4。

  • 修复asyncio.time_monotonic模块中的错误处理。

  • 修复Lock、Condition和Semaphore的acquire()方法:不返回上下文管理器而是返回True,就像Tulip。Task._step()现在来完成这项工作。

其他更改

  • tox.ini:将PYTHONASYNCIODEBUG设置为1以运行测试

2014-02-25:版本 0.1.6

Trollius更改

  • 添加新的Sphinx文档:[https://trollius.readthedocs.io/](https://trollius.readthedocs.io/)

  • tox:将posargs传递给nosetests。由Ian Wienand提供的补丁。

  • 修复Python 3.2的支持,并将py32添加到tox.ini

  • 与Tulip 0.4.1合并

tulip 0.4.1 主要变更

  • 问题 #81:添加对 UNIX 域套接字的支持。新 API

    • loop.create_unix_connection()

    • loop.create_unix_server()

    • streams.open_unix_connection()

    • streams.start_unix_server()

  • 问题 #80:添加新的事件循环异常处理 API。新 API

    • loop.set_exception_handler()

    • loop.call_exception_handler()

    • loop.default_exception_handler()

  • 问题 #136:向 BaseEventLoopTests 添加 get_debug() 和 set_debug() 方法。同时添加 PYTHONASYNCIODEBUG 环境变量,以便从 Python 启动时调试协程,能够调试直接在 asyncio 模块中定义的协程。

tulip 0.4.1 的其他变更

  • asyncio.subprocess:修复 communicate() 中的竞争条件

  • 修复 _ProactorWritePipeTransport._pipe_closed()

  • 问题 #139:改善“致命错误”的错误信息。

  • 问题 #140:WriteTransport.set_write_buffer_size() 调用 _maybe_pause_protocol()

  • 问题 #129:BaseEventLoop.sock_connect() 现在如果地址未解析(使用主机名而不是 IP 地址)将引发错误,对于 AF_INET 和 AF_INET6 地址族。

  • 问题 #131:as_completed() 和 wait() 现在如果在 futures 列表中不是列表,而是 Future、Task 或协程对象,则引发 TypeError

  • Python 问题 #20495:在 FreeBSD 8 以下的 FreeBSD 上跳过 test_asyncio 中的 test_read_pty_output() 测试

  • 问题 #130:在 subprocess_exec/subprocess_shell 参数上添加更多检查

  • 问题 #126:call_soon()、call_soon_threadsafe()、call_later()、call_at() 和 run_in_executor() 现在如果回调是协程函数,则引发 TypeError

  • Python 问题 #20505:BaseEventLoop 再次使用时钟的解析来决定是否执行计划中的任务。

2014-02-10:版本 0.1.5

  • 与 tulip 0.3.1 合并

    • 新 asyncio.subprocess 模块

    • _UnixWritePipeTransport 现在也支持字符设备,就像 _UnixReadPipeTransport 一样。补丁由 Jonathan Slenders 编写。

    • StreamReader.readexactly() 现在如果在收到足够的字节之前到达流的末尾,将引发 IncompleteReadError,而不是返回少于请求的字节数。

    • poll 和 epoll 选择器现在将超时值四舍五入到零(而不是四舍五入到零)以修复性能问题

    • asyncio.queue:Empty 重命名为 QueueEmpty,Full 重命名为 QueueFull

    • _UnixWritePipeTransport 和 _ProactorBasePipeTransport 的 _fatal_error() 不记录 BrokenPipeError 或 ConnectionResetError

    • Future.set_exception(exc) 现在如果 exc 是一个类,则实例化 exc

    • streams.StreamReader:使用 bytearray 而不是 bytes 的 deque 作为内部缓冲区

  • 修复 test_wait_for() 单元测试

2014-01-22:版本 0.1.4

  • 项目已迁移至 https://bitbucket.org/enovance/trollius

  • 修复 CoroWrapper (_DEBUG=True):添加缺少的导入

  • 当 Return 不被引发时发出警告

  • 与 tulip 合并以获取最新的 tulip 错误修复

  • 修复 tox.ini 中的依赖关系以支持不同的 Python 版本

2014-01-13:版本 0.1.3

  • 解决 Python 2.6.6 以下 ssl 模块的错误。例如,Mac OS 10.6(Snow Leopard)使用 Python 2.6.1。

  • return x, y 现在写成 raise Return(x, y),而不是 raise Return((x, y))

  • 支持 “with (yield lock):” 语法用于 Lock、Condition 和 Semaphore

  • SSL 支持现在是可选的:如果 ssl 模块缺失,则不会失败

  • 添加 tox.ini,用于运行单元测试。例如,“tox -e py27” 创建一个虚拟环境以使用 Python 2.7 运行测试。

2014-01-08:版本 0.1.2

  • Trollius 现在支持 CPython 2.6-3.4、PyPy 和 Windows。所有单元测试在 Linux 上使用 CPython 2.7 都通过。

  • 修复 Windows 支持。修复 _overlapped 模块的编译并添加 asyncio._winapi 模块(用纯 Python 编写)。补丁由 Marc Schlaich 编写。

  • 支持 Python 2.6:需要一个额外的依赖项,ordereddict(以及 unittest2 用于单元测试)

  • 支持 Python 3.2、3.3 和 3.4

  • 支持 PyPy 2.2

  • 不要修改 __builtins__ 或 ssl 模块以注入回滚的异常,如 BlockingIOError 或 SSLWantReadError。异步模块中提供了异常,例如:asyncio.BlockingIOError。

2014-01-06: 版本 0.1.1

  • 修复 Mac OS X 上的 asyncio.time_monotonic

  • 修复 create_connection(ssl=True)

  • 不再在 ssl 模块中导出回滚的 SSLContext,以免混淆测试 hasattr(ssl, “SSLContext”) 的库

  • 放宽对回滚的 concurrent.futures 模块的依赖:如果该模块不存在,则使用同步执行器

2014-01-04: 版本 0.1

  • 首次公开发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

trollius-2.2.1.tar.gz (302.8 kB 查看哈希值)

上传时间

构建分布

trollius-2.2.1-cp27-cp27m-win_amd64.whl (144.0 kB 查看哈希值)

上传时间 CPython 2.7m Windows x86-64

trollius-2.2.1-cp27-cp27m-win32.whl (142.7 kB 查看哈希值)

上传时间 CPython 2.7m Windows x86

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面