https://github.com/python/cpython/commit/a545749b0e6c56cab853c5c8df3c199b9707994f
commit: a545749b0e6c56cab853c5c8df3c199b9707994f
branch: main
author: Kumar Aditya <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2025-02-15T15:01:53+05:30
summary:
gh-130145: fix `loop.run_forever` when loop is already running (#130146)
files:
A Misc/NEWS.d/next/Library/2025-02-15-07-50-37.gh-issue-130145.I0CkV0.rst
M Lib/asyncio/base_events.py
M Lib/test/test_asyncio/test_events.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index ed852421e44212..546361f80b1f47 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -671,8 +671,8 @@ def _run_forever_cleanup(self):
def run_forever(self):
"""Run until stop() is called."""
+ self._run_forever_setup()
try:
- self._run_forever_setup()
while True:
self._run_once()
if self._stopping:
diff --git a/Lib/test/test_asyncio/test_events.py
b/Lib/test/test_asyncio/test_events.py
index 3838993fa8c6a9..35069608d8163a 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -3004,6 +3004,22 @@ async def main():
self.loop.run_until_complete(main()),
'hello')
+ def test_get_running_loop_already_running(self):
+ async def main():
+ running_loop = asyncio.get_running_loop()
+ loop = asyncio.new_event_loop()
+ try:
+ loop.run_forever()
+ except RuntimeError:
+ pass
+ else:
+ self.fail("RuntimeError not raised")
+
+ self.assertIs(asyncio.get_running_loop(), running_loop)
+
+ self.loop.run_until_complete(main())
+
+
def test_get_event_loop_returns_running_loop(self):
class TestError(Exception):
pass
diff --git
a/Misc/NEWS.d/next/Library/2025-02-15-07-50-37.gh-issue-130145.I0CkV0.rst
b/Misc/NEWS.d/next/Library/2025-02-15-07-50-37.gh-issue-130145.I0CkV0.rst
new file mode 100644
index 00000000000000..9c8c469bff5663
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-02-15-07-50-37.gh-issue-130145.I0CkV0.rst
@@ -0,0 +1 @@
+Fix :meth:`!asyncio.AbstractEventloop.run_forever` when another loop is
already running.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]