From 80bbe6a7b67f33d0d0976bb8e3e5ba26b6b0e626 Mon Sep 17 00:00:00 2001 From: jimmylai Date: Tue, 5 Sep 2017 17:36:59 -0700 Subject: [PATCH] bpo-31350: Optimize get_event_loop and _get_running_loop (#3347) * call remove_done_callback in finally section * Optimize get_event_loop and _get_running_loop * rename _loop_pid as loop_pid and add blurb news * rename _loop_pid as loop_pid and add blurb news * add back _RunningLoop * Update 2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst * Update 2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst --- Lib/asyncio/events.py | 10 ++++------ .../Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst | 1 + 2 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index 6af91374ecf..03af6994e94 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -606,8 +606,7 @@ def new_event_loop(self): # A TLS for the running event loop, used by _get_running_loop. class _RunningLoop(threading.local): - _loop = None - _pid = None + loop_pid = (None, None) _running_loop = _RunningLoop() @@ -619,8 +618,8 @@ def _get_running_loop(): This is a low-level function intended to be used by event loops. This function is thread-specific. """ - running_loop = _running_loop._loop - if running_loop is not None and _running_loop._pid == os.getpid(): + running_loop, pid = _running_loop.loop_pid + if running_loop is not None and pid == os.getpid(): return running_loop @@ -630,8 +629,7 @@ def _set_running_loop(loop): This is a low-level function intended to be used by event loops. This function is thread-specific. """ - _running_loop._pid = os.getpid() - _running_loop._loop = loop + _running_loop.loop_pid = (loop, os.getpid()) def _init_event_loop_policy(): diff --git a/Misc/NEWS.d/next/Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst b/Misc/NEWS.d/next/Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst new file mode 100644 index 00000000000..299cf3c9d54 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst @@ -0,0 +1 @@ +Micro-optimize :func:`asyncio._get_running_loop` to become up to 10% faster.