mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
GH-93896: AAlways set event loop in asyncio.run and IsolatedAsyncioTestCase (#94593)
This commit is contained in:
parent
e925241d95
commit
14fea6b4d2
3 changed files with 19 additions and 0 deletions
|
@ -52,6 +52,7 @@ class Runner:
|
|||
self._loop = None
|
||||
self._context = None
|
||||
self._interrupt_count = 0
|
||||
self._set_event_loop = False
|
||||
|
||||
def __enter__(self):
|
||||
self._lazy_init()
|
||||
|
@ -70,6 +71,8 @@ class Runner:
|
|||
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||
loop.run_until_complete(loop.shutdown_default_executor())
|
||||
finally:
|
||||
if self._set_event_loop:
|
||||
events.set_event_loop(None)
|
||||
loop.close()
|
||||
self._loop = None
|
||||
self._state = _State.CLOSED
|
||||
|
@ -111,6 +114,8 @@ class Runner:
|
|||
|
||||
self._interrupt_count = 0
|
||||
try:
|
||||
if self._set_event_loop:
|
||||
events.set_event_loop(self._loop)
|
||||
return self._loop.run_until_complete(task)
|
||||
except exceptions.CancelledError:
|
||||
if self._interrupt_count > 0 and task.uncancel() == 0:
|
||||
|
@ -130,6 +135,7 @@ class Runner:
|
|||
return
|
||||
if self._loop_factory is None:
|
||||
self._loop = events.new_event_loop()
|
||||
self._set_event_loop = True
|
||||
else:
|
||||
self._loop = self._loop_factory()
|
||||
if self._debug is not None:
|
||||
|
|
|
@ -198,6 +198,18 @@ class RunTests(BaseTest):
|
|||
self.assertIsNone(spinner.ag_frame)
|
||||
self.assertFalse(spinner.ag_running)
|
||||
|
||||
def test_asyncio_run_set_event_loop(self):
|
||||
#See https://github.com/python/cpython/issues/93896
|
||||
|
||||
async def main():
|
||||
await asyncio.sleep(0)
|
||||
return 42
|
||||
|
||||
policy = asyncio.get_event_loop_policy()
|
||||
policy.set_event_loop = mock.Mock()
|
||||
asyncio.run(main())
|
||||
self.assertTrue(policy.set_event_loop.called)
|
||||
|
||||
|
||||
class RunnerTests(BaseTest):
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix :func:`asyncio.run` and :class:`unittest.IsolatedAsyncioTestCase` to always the set event loop as it was done in Python 3.10 and earlier. Patch by Kumar Aditya.
|
Loading…
Add table
Add a link
Reference in a new issue