1
0

Merge pull request #10282 from f321x/cleanup_event_loop

util: cleanup asyncio event loop after stopping
This commit is contained in:
ghost43
2025-10-28 14:15:03 +00:00
committed by GitHub

View File

@@ -52,7 +52,7 @@ import functools
from functools import partial
from abc import abstractmethod, ABC
import enum
from contextlib import nullcontext
from contextlib import nullcontext, suppress
import traceback
import inspect
@@ -1704,8 +1704,20 @@ def create_and_start_event_loop() -> Tuple[asyncio.AbstractEventLoop,
loop.run_until_complete(stopping_fut)
finally:
# clean-up
try:
pending_tasks = asyncio.gather(*asyncio.all_tasks(loop), return_exceptions=True)
pending_tasks.cancel()
with suppress(asyncio.CancelledError):
loop.run_until_complete(pending_tasks)
loop.run_until_complete(loop.shutdown_asyncgens())
if isinstance(loop, asyncio.BaseEventLoop):
loop.run_until_complete(loop.shutdown_default_executor())
except Exception as e:
_logger.debug(f"exception when cleaning up asyncio event loop: {e}")
global _asyncio_event_loop
_asyncio_event_loop = None
loop.close()
loop.set_exception_handler(on_exception)
_set_custom_task_factory(loop)