bpo-34687: Make asynico use ProactorEventLoop by default (GH-9538)

This commit is contained in:
Victor Stinner 2018-09-25 08:27:08 -07:00 committed by Yury Selivanov
parent c8c0249c9e
commit 6ea29c5e90
7 changed files with 30 additions and 14 deletions

View File

@ -23,6 +23,10 @@ All Platforms
Windows
=======
.. versionchanged:: 3.8
On Windows, :class:`ProactorEventLoop` is now the default event loop.
All event loops on Windows do not support the following methods:
* :meth:`loop.create_unix_connection` and
@ -67,16 +71,8 @@ Windows configuration.
Subprocess Support on Windows
-----------------------------
:class:`SelectorEventLoop` on Windows does not support subproceses.
On Windows, :class:`ProactorEventLoop` should be used instead::
import asyncio
asyncio.set_event_loop_policy(
asyncio.WindowsProactorEventLoopPolicy())
asyncio.run(your_code())
On Windows, the default event loop :class:`ProactorEventLoop` supports
subprocesses, whereas :class:`SelectorEventLoop` does not.
The :meth:`policy.set_child_watcher()
<AbstractEventLoopPolicy.set_child_watcher>` function is also

View File

@ -92,11 +92,23 @@ asyncio ships with the following built-in policies:
.. class:: DefaultEventLoopPolicy
The default asyncio policy. Uses :class:`SelectorEventLoop`
on both Unix and Windows platforms.
on Unix and :class:`ProactorEventLoop` on Windows.
There is no need to install the default policy manually. asyncio
is configured to use the default policy automatically.
.. versionchanged:: 3.8
On Windows, :class:`ProactorEventLoop` is now used by default.
.. class:: WindowsSelectorEventLoopPolicy
An alternative event loop policy that uses the
:class:`SelectorEventLoop` event loop implementation.
Availability: Windows.
.. class:: WindowsProactorEventLoopPolicy

View File

@ -116,6 +116,11 @@ New Modules
Improved Modules
================
asyncio
-------
On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`.
os.path
-------

View File

@ -811,4 +811,4 @@ class WindowsProactorEventLoopPolicy(events.BaseDefaultEventLoopPolicy):
_loop_factory = ProactorEventLoop
DefaultEventLoopPolicy = WindowsSelectorEventLoopPolicy
DefaultEventLoopPolicy = WindowsProactorEventLoopPolicy

View File

@ -1014,7 +1014,7 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
def setUp(self):
super().setUp()
self.loop = asyncio.new_event_loop()
self.loop = asyncio.SelectorEventLoop()
self.set_event_loop(self.loop)
@mock.patch('socket.getnameinfo')

View File

@ -816,7 +816,8 @@ os.close(fd)
addr = q.get()
# Should not be stuck in an infinite loop.
with self.assertRaises((ConnectionResetError, BrokenPipeError)):
with self.assertRaises((ConnectionResetError, ConnectionAbortedError,
BrokenPipeError)):
self.loop.run_until_complete(client(*addr))
# Clean up the thread. (Only on success; on failure, it may

View File

@ -0,0 +1,2 @@
On Windows, asyncio now uses ProactorEventLoop, instead of
SelectorEventLoop, by default.