https://github.com/python/cpython/commit/05d27a84f4a85d777239e95e6d9b6dae8b32c538
commit: 05d27a84f4a85d777239e95e6d9b6dae8b32c538
branch: main
author: Kumar Aditya <kumaradi...@python.org>
committer: kumaraditya303 <kumaradi...@python.org>
date: 2025-04-12T12:03:52+05:30
summary:

gh-130322: drop deprecation of `asyncio.set_event_loop` (#132349)

files:
M Doc/deprecations/pending-removal-in-3.16.rst
M Doc/library/asyncio-eventloop.rst
M Lib/asyncio/__main__.py
M Lib/asyncio/events.py
M Lib/asyncio/runners.py
M Lib/test/test_asyncgen.py
M Lib/test/test_asyncio/functional.py
M Lib/test/test_asyncio/test_base_events.py
M Lib/test/test_asyncio/test_events.py
M Lib/test/test_asyncio/test_futures.py
M Lib/test/test_asyncio/test_streams.py
M Lib/test/test_asyncio/test_tasks.py
M Lib/test/test_asyncio/test_unix_events.py
M Lib/test/test_asyncio/utils.py
M Lib/test/test_coroutines.py
M Lib/test/test_unittest/test_async_case.py

diff --git a/Doc/deprecations/pending-removal-in-3.16.rst 
b/Doc/deprecations/pending-removal-in-3.16.rst
index b408a6d72febe0..acb53198bdc07e 100644
--- a/Doc/deprecations/pending-removal-in-3.16.rst
+++ b/Doc/deprecations/pending-removal-in-3.16.rst
@@ -32,7 +32,6 @@ Pending removal in Python 3.16
     * :class:`asyncio.WindowsProactorEventLoopPolicy`
     * :func:`asyncio.get_event_loop_policy`
     * :func:`asyncio.set_event_loop_policy`
-    * :func:`asyncio.set_event_loop`
 
     Users should use :func:`asyncio.run` or :class:`asyncio.Runner` with
     *loop_factory* to use the desired event loop implementation.
diff --git a/Doc/library/asyncio-eventloop.rst 
b/Doc/library/asyncio-eventloop.rst
index fdb75fe9e63a88..fae68803107639 100644
--- a/Doc/library/asyncio-eventloop.rst
+++ b/Doc/library/asyncio-eventloop.rst
@@ -65,18 +65,14 @@ an event loop:
    .. note::
 
       The :mod:`!asyncio` policy system is deprecated and will be removed
-      in Python 3.16; from there on, this function will always return the
-      running event loop.
-
+      in Python 3.16; from there on, this function will return the current
+      running event loop if present else it will return the
+      loop set by :func:`set_event_loop`.
 
 .. function:: set_event_loop(loop)
 
    Set *loop* as the current event loop for the current OS thread.
 
-   .. deprecated:: 3.14
-      The :func:`set_event_loop` function is deprecated and will be removed
-      in Python 3.16.
-
 .. function:: new_event_loop()
 
    Create and return a new event loop object.
diff --git a/Lib/asyncio/__main__.py b/Lib/asyncio/__main__.py
index e624f7632bedce..69f5a30cfe5095 100644
--- a/Lib/asyncio/__main__.py
+++ b/Lib/asyncio/__main__.py
@@ -149,7 +149,7 @@ def interrupt(self) -> None:
 
     return_code = 0
     loop = asyncio.new_event_loop()
-    asyncio._set_event_loop(loop)
+    asyncio.set_event_loop(loop)
 
     repl_locals = {'asyncio': asyncio}
     for key in {'__name__', '__package__',
diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
index 2e45b4fe6fa2dd..2913f901dca65f 100644
--- a/Lib/asyncio/events.py
+++ b/Lib/asyncio/events.py
@@ -15,7 +15,6 @@
     "_set_event_loop_policy",
     "set_event_loop_policy",
     "get_event_loop",
-    "_set_event_loop",
     "set_event_loop",
     "new_event_loop",
     "_set_running_loop",
@@ -835,13 +834,9 @@ def get_event_loop():
     return _get_event_loop_policy().get_event_loop()
 
 
-def _set_event_loop(loop):
-    _get_event_loop_policy().set_event_loop(loop)
-
 def set_event_loop(loop):
     """Equivalent to calling get_event_loop_policy().set_event_loop(loop)."""
-    warnings._deprecated('asyncio.set_event_loop', remove=(3,16))
-    _set_event_loop(loop)
+    _get_event_loop_policy().set_event_loop(loop)
 
 
 def new_event_loop():
diff --git a/Lib/asyncio/runners.py b/Lib/asyncio/runners.py
index 14397b4ad0c732..ba37e003a655c0 100644
--- a/Lib/asyncio/runners.py
+++ b/Lib/asyncio/runners.py
@@ -74,7 +74,7 @@ def close(self):
                 loop.shutdown_default_executor(constants.THREAD_JOIN_TIMEOUT))
         finally:
             if self._set_event_loop:
-                events._set_event_loop(None)
+                events.set_event_loop(None)
             loop.close()
             self._loop = None
             self._state = _State.CLOSED
@@ -147,7 +147,7 @@ def _lazy_init(self):
             if not self._set_event_loop:
                 # Call set_event_loop only once to avoid calling
                 # attach_loop multiple times on child watchers
-                events._set_event_loop(self._loop)
+                events.set_event_loop(self._loop)
                 self._set_event_loop = True
         else:
             self._loop = self._loop_factory()
diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py
index d7dcf619300b2b..2c44647bf3e2f9 100644
--- a/Lib/test/test_asyncgen.py
+++ b/Lib/test/test_asyncgen.py
@@ -624,7 +624,7 @@ class AsyncGenAsyncioTest(unittest.TestCase):
 
     def setUp(self):
         self.loop = asyncio.new_event_loop()
-        asyncio._set_event_loop(None)
+        asyncio.set_event_loop(None)
 
     def tearDown(self):
         self.loop.close()
diff --git a/Lib/test/test_asyncio/functional.py 
b/Lib/test/test_asyncio/functional.py
index 555394b915de48..96dc9ab4401067 100644
--- a/Lib/test/test_asyncio/functional.py
+++ b/Lib/test/test_asyncio/functional.py
@@ -24,7 +24,7 @@ def loop_exception_handler(self, loop, context):
 
     def setUp(self):
         self.loop = self.new_loop()
-        asyncio._set_event_loop(None)
+        asyncio.set_event_loop(None)
 
         self.loop.set_exception_handler(self.loop_exception_handler)
         self.__unhandled_exceptions = []
@@ -39,7 +39,7 @@ def tearDown(self):
                 self.fail('unexpected calls to loop.call_exception_handler()')
 
         finally:
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
             self.loop = None
 
     def tcp_server(self, server_prog, *,
diff --git a/Lib/test/test_asyncio/test_base_events.py 
b/Lib/test/test_asyncio/test_base_events.py
index 7838d1fccb88e1..2ca5c4c6719c41 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -336,10 +336,10 @@ def check_in_thread(loop, event, debug, create_loop, fut):
                 if create_loop:
                     loop2 = base_events.BaseEventLoop()
                     try:
-                        asyncio._set_event_loop(loop2)
+                        asyncio.set_event_loop(loop2)
                         self.check_thread(loop, debug)
                     finally:
-                        asyncio._set_event_loop(None)
+                        asyncio.set_event_loop(None)
                         loop2.close()
                 else:
                     self.check_thread(loop, debug)
@@ -695,7 +695,7 @@ def default_exception_handler(self, context):
 
         loop = Loop()
         self.addCleanup(loop.close)
-        asyncio._set_event_loop(loop)
+        asyncio.set_event_loop(loop)
 
         def run_loop():
             def zero_error():
@@ -1988,7 +1988,7 @@ def stop_loop_cb(loop):
         async def stop_loop_coro(loop):
             loop.stop()
 
-        asyncio._set_event_loop(self.loop)
+        asyncio.set_event_loop(self.loop)
         self.loop.set_debug(True)
         self.loop.slow_callback_duration = 0.0
 
diff --git a/Lib/test/test_asyncio/test_events.py 
b/Lib/test/test_asyncio/test_events.py
index a067bc98ecc2a8..873c503fa02b21 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -57,7 +57,7 @@ async def doit():
         return 'hello'
 
     with contextlib.closing(asyncio.new_event_loop()) as loop:
-        asyncio._set_event_loop(loop)
+        asyncio.set_event_loop(loop)
         return loop.run_until_complete(doit())
 
 
@@ -2830,14 +2830,6 @@ async def inner():
 
 class PolicyTests(unittest.TestCase):
 
-    def test_asyncio_set_event_loop_deprecation(self):
-        with self.assertWarnsRegex(
-                DeprecationWarning, "'asyncio.set_event_loop' is deprecated"):
-            loop = asyncio.new_event_loop()
-            asyncio.set_event_loop(loop)
-            self.assertIs(loop, asyncio.get_event_loop())
-            loop.close()
-
     def test_abstract_event_loop_policy_deprecation(self):
         with self.assertWarnsRegex(
                 DeprecationWarning, "'asyncio.AbstractEventLoopPolicy' is 
deprecated"):
@@ -2974,14 +2966,14 @@ def setUp(self):
         super().setUp()
 
         self.loop = asyncio.new_event_loop()
-        asyncio._set_event_loop(self.loop)
+        asyncio.set_event_loop(self.loop)
 
     def tearDown(self):
         try:
             super().tearDown()
         finally:
             self.loop.close()
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
 
             events._get_running_loop = self._get_running_loop_saved
             events._set_running_loop = self._set_running_loop_saved
@@ -3053,7 +3045,7 @@ def get_event_loop(self):
 
             with self.assertRaises(TestError):
                 asyncio.get_event_loop()
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
             with self.assertRaises(TestError):
                 asyncio.get_event_loop()
 
@@ -3068,10 +3060,10 @@ async def func():
 
             loop.run_until_complete(func())
 
-            asyncio._set_event_loop(loop)
+            asyncio.set_event_loop(loop)
             with self.assertRaises(TestError):
                 asyncio.get_event_loop()
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
             with self.assertRaises(TestError):
                 asyncio.get_event_loop()
 
@@ -3095,7 +3087,7 @@ def test_get_event_loop_returns_running_loop2(self):
             with self.assertRaisesRegex(RuntimeError, 'no current'):
                 asyncio.get_event_loop()
 
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
             with self.assertRaisesRegex(RuntimeError, 'no current'):
                 asyncio.get_event_loop()
 
@@ -3106,10 +3098,10 @@ async def func():
 
             loop.run_until_complete(func())
 
-            asyncio._set_event_loop(loop)
+            asyncio.set_event_loop(loop)
             self.assertIs(asyncio.get_event_loop(), loop)
 
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
             with self.assertRaisesRegex(RuntimeError, 'no current'):
                 asyncio.get_event_loop()
 
diff --git a/Lib/test/test_asyncio/test_futures.py 
b/Lib/test/test_asyncio/test_futures.py
index 01d6230e6dd9a3..8b51522278aaa6 100644
--- a/Lib/test/test_asyncio/test_futures.py
+++ b/Lib/test/test_asyncio/test_futures.py
@@ -178,8 +178,8 @@ async def test():
 
     def test_constructor_use_global_loop(self):
         # Deprecated in 3.10, undeprecated in 3.12
-        asyncio._set_event_loop(self.loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         f = self._new_future()
         self.assertIs(f._loop, self.loop)
         self.assertIs(f.get_loop(), self.loop)
@@ -566,8 +566,8 @@ async def test():
 
     def test_wrap_future_use_global_loop(self):
         # Deprecated in 3.10, undeprecated in 3.12
-        asyncio._set_event_loop(self.loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         def run(arg):
             return (arg, threading.get_ident())
         ex = concurrent.futures.ThreadPoolExecutor(1)
diff --git a/Lib/test/test_asyncio/test_streams.py 
b/Lib/test/test_asyncio/test_streams.py
index 0b47b2b91a1fe5..4fa4384346f9e9 100644
--- a/Lib/test/test_asyncio/test_streams.py
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -68,7 +68,7 @@ def _basetest_open_connection_no_loop_ssl(self, 
open_connection_fut):
         try:
             reader, writer = self.loop.run_until_complete(open_connection_fut)
         finally:
-            asyncio._set_event_loop(None)
+            asyncio.set_event_loop(None)
         writer.write(b'GET / HTTP/1.0\r\n\r\n')
         f = reader.read()
         data = self.loop.run_until_complete(f)
@@ -836,8 +836,8 @@ def test_streamreader_constructor_use_global_loop(self):
         # asyncio issue #184: Ensure that StreamReaderProtocol constructor
         # retrieves the current loop if the loop parameter is not set
         # Deprecated in 3.10, undeprecated in 3.12
-        self.addCleanup(asyncio._set_event_loop, None)
-        asyncio._set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
         reader = asyncio.StreamReader()
         self.assertIs(reader._loop, self.loop)
 
@@ -860,8 +860,8 @@ def 
test_streamreaderprotocol_constructor_use_global_loop(self):
         # asyncio issue #184: Ensure that StreamReaderProtocol constructor
         # retrieves the current loop if the loop parameter is not set
         # Deprecated in 3.10, undeprecated in 3.12
-        self.addCleanup(asyncio._set_event_loop, None)
-        asyncio._set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
         reader = mock.Mock()
         protocol = asyncio.StreamReaderProtocol(reader)
         self.assertIs(protocol._loop, self.loop)
diff --git a/Lib/test/test_asyncio/test_tasks.py 
b/Lib/test/test_asyncio/test_tasks.py
index f1a665e5df3fd3..8d7f17334547b3 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -212,8 +212,8 @@ async def test():
         self.assertEqual(t.result(), 'ok')
 
         # Deprecated in 3.10, undeprecated in 3.12
-        asyncio._set_event_loop(self.loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         t = asyncio.ensure_future(notmuch())
         self.assertIs(t._loop, self.loop)
         self.loop.run_until_complete(t)
@@ -2202,8 +2202,8 @@ def test_shield_coroutine_use_global_loop(self):
         async def coro():
             return 42
 
-        asyncio._set_event_loop(self.loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         outer = asyncio.shield(coro())
         self.assertEqual(outer._loop, self.loop)
         res = self.loop.run_until_complete(outer)
@@ -3322,8 +3322,8 @@ async def gather():
 
     def test_constructor_empty_sequence_use_global_loop(self):
         # Deprecated in 3.10, undeprecated in 3.12
-        asyncio._set_event_loop(self.one_loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.one_loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         fut = asyncio.gather()
         self.assertIsInstance(fut, asyncio.Future)
         self.assertIs(fut._loop, self.one_loop)
@@ -3430,8 +3430,8 @@ def test_constructor_use_global_loop(self):
         # Deprecated in 3.10, undeprecated in 3.12
         async def coro():
             return 'abc'
-        asyncio._set_event_loop(self.other_loop)
-        self.addCleanup(asyncio._set_event_loop, None)
+        asyncio.set_event_loop(self.other_loop)
+        self.addCleanup(asyncio.set_event_loop, None)
         gen1 = coro()
         gen2 = coro()
         fut = asyncio.gather(gen1, gen2)
diff --git a/Lib/test/test_asyncio/test_unix_events.py 
b/Lib/test/test_asyncio/test_unix_events.py
index 7f9f5a1abbcd99..e020c1f3e4f677 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -1113,11 +1113,11 @@ class TestFunctional(unittest.TestCase):
 
     def setUp(self):
         self.loop = asyncio.new_event_loop()
-        asyncio._set_event_loop(self.loop)
+        asyncio.set_event_loop(self.loop)
 
     def tearDown(self):
         self.loop.close()
-        asyncio._set_event_loop(None)
+        asyncio.set_event_loop(None)
 
     def test_add_reader_invalid_argument(self):
         def assert_raises():
diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py
index c61105712d3cff..ad2bde490c888a 100644
--- a/Lib/test/test_asyncio/utils.py
+++ b/Lib/test/test_asyncio/utils.py
@@ -540,7 +540,7 @@ def set_event_loop(self, loop, *, cleanup=True):
         if loop is None:
             raise AssertionError('loop is None')
         # ensure that the event loop is passed explicitly in asyncio
-        events._set_event_loop(None)
+        events.set_event_loop(None)
         if cleanup:
             self.addCleanup(self.close_loop, loop)
 
@@ -553,7 +553,7 @@ def setUp(self):
         self._thread_cleanup = threading_helper.threading_setup()
 
     def tearDown(self):
-        events._set_event_loop(None)
+        events.set_event_loop(None)
 
         # Detect CPython bug #23353: ensure that yield/yield-from is not used
         # in an except block of a generator
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
index deeaa724e79544..761cb230277bd9 100644
--- a/Lib/test/test_coroutines.py
+++ b/Lib/test/test_coroutines.py
@@ -2300,7 +2300,7 @@ async def f():
             buffer.append('unreachable')
 
         loop = asyncio.new_event_loop()
-        asyncio._set_event_loop(loop)
+        asyncio.set_event_loop(loop)
         try:
             loop.run_until_complete(f())
         except MyException:
diff --git a/Lib/test/test_unittest/test_async_case.py 
b/Lib/test/test_unittest/test_async_case.py
index fc996b42149dcb..993e6bf013cfbf 100644
--- a/Lib/test/test_unittest/test_async_case.py
+++ b/Lib/test/test_unittest/test_async_case.py
@@ -476,7 +476,7 @@ async def cleanup(self, fut):
     def test_setup_get_event_loop(self):
         # See https://github.com/python/cpython/issues/95736
         # Make sure the default event loop is not used
-        asyncio._set_event_loop(None)
+        asyncio.set_event_loop(None)
 
         class TestCase1(unittest.IsolatedAsyncioTestCase):
             def setUp(self):

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to