From a5e85f347c251d22db4625315d504d683ca2eded Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Tue, 31 Jan 2023 21:34:32 -0500 Subject: [PATCH] FIX: do not create a new event loop so often --- src/prompt_toolkit/eventloop/utils.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/prompt_toolkit/eventloop/utils.py b/src/prompt_toolkit/eventloop/utils.py index 26dabb40e..9aa7104ed 100644 --- a/src/prompt_toolkit/eventloop/utils.py +++ b/src/prompt_toolkit/eventloop/utils.py @@ -103,18 +103,25 @@ def get_traceback_from_context(context: Dict[str, Any]) -> Optional[TracebackTyp return None +__loop_created = False + + def get_event_loop() -> asyncio.AbstractEventLoop: """Backward compatible way to get the event loop""" # Python 3.6 doesn't have get_running_loop # Python 3.10 deprecated get_event_loop - if sys.version_info >= (3, 7): - getloop = asyncio.get_running_loop - else: - getloop = asyncio.get_event_loop try: - return getloop() + if sys.version_info >= (3, 7): + return asyncio.get_running_loop() + else: + return asyncio.get_event_loop() + except RuntimeError: - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - return loop + global __loop_created + if not __loop_created: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + __loop_created = True + + return asyncio.get_event_loop()