]> granicus.if.org Git - python/commitdiff
bpo-34687: Make asynico use ProactorEventLoop by default (GH-9538)
authorVictor Stinner <vstinner@redhat.com>
Tue, 25 Sep 2018 15:27:08 +0000 (08:27 -0700)
committerYury Selivanov <yury@magic.io>
Tue, 25 Sep 2018 15:27:08 +0000 (11:27 -0400)
Doc/library/asyncio-platforms.rst
Doc/library/asyncio-policy.rst
Doc/whatsnew/3.8.rst
Lib/asyncio/windows_events.py
Lib/test/test_asyncio/test_base_events.py
Lib/test/test_asyncio/test_streams.py
Misc/NEWS.d/next/Library/2018-09-24-17-14-57.bpo-34687.Fku_8S.rst [new file with mode: 0644]

index f8ecb58d3a01b6afa918bd468fa268f8b9a53fcc..81d840e23277ea8204279028741f4019cb7361c0 100644 (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
index 42f936da468ee24c820e47175bf026048630f911..560f8b3135e1f117df3c5273217ef857a8eccb89 100644 (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
 
index e37a70f32d9952aa28a0084a66ea5262bd0fc4cb..89764c8cd2bc321f71058ad0d9cfec14cbfbf4e7 100644 (file)
@@ -116,6 +116,11 @@ New Modules
 Improved Modules
 ================
 
+asyncio
+-------
+
+On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`.
+
 os.path
 -------
 
index fdde8e9e0bf418329092ab34018fc8921a3ef846..772ddf4dfebd518826c7f2006bb4cc8880f0ad46 100644 (file)
@@ -811,4 +811,4 @@ class WindowsProactorEventLoopPolicy(events.BaseDefaultEventLoopPolicy):
     _loop_factory = ProactorEventLoop
 
 
-DefaultEventLoopPolicy = WindowsSelectorEventLoopPolicy
+DefaultEventLoopPolicy = WindowsProactorEventLoopPolicy
index fe3c38371d0cda47c4c5e9dea6b64f5be1fd757b..95f4f6b82d5313574459ce5f1dd75c322e425ca7 100644 (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')
index d8e371510dea06bb7814199efd4f48e2dcbc3e05..c529e5208c99f59105bfa51e76638c8d08b0861d 100644 (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
diff --git a/Misc/NEWS.d/next/Library/2018-09-24-17-14-57.bpo-34687.Fku_8S.rst b/Misc/NEWS.d/next/Library/2018-09-24-17-14-57.bpo-34687.Fku_8S.rst
new file mode 100644 (file)
index 0000000..0e203c4
--- /dev/null
@@ -0,0 +1,2 @@
+On Windows, asyncio now uses ProactorEventLoop, instead of
+SelectorEventLoop, by default.