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

View File

@ -92,11 +92,23 @@ asyncio ships with the following built-in policies:
.. class:: DefaultEventLoopPolicy .. class:: DefaultEventLoopPolicy
The default asyncio policy. Uses :class:`SelectorEventLoop` 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 There is no need to install the default policy manually. asyncio
is configured to use the default policy automatically. 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 .. class:: WindowsProactorEventLoopPolicy

View File

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

View File

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

View File

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

View File

@ -816,7 +816,8 @@ os.close(fd)
addr = q.get() addr = q.get()
# Should not be stuck in an infinite loop. # 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)) self.loop.run_until_complete(client(*addr))
# Clean up the thread. (Only on success; on failure, it may # 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.