Skip to content

Commit 80bbe6a

Browse files
jimmylai1st1
jimmylai
authored andcommitted
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
1 parent 305e56c commit 80bbe6a

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

Lib/asyncio/events.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,7 @@ def new_event_loop(self):
606606

607607
# A TLS for the running event loop, used by _get_running_loop.
608608
class _RunningLoop(threading.local):
609-
_loop = None
610-
_pid = None
609+
loop_pid = (None, None)
611610

612611

613612
_running_loop = _RunningLoop()
@@ -619,8 +618,8 @@ def _get_running_loop():
619618
This is a low-level function intended to be used by event loops.
620619
This function is thread-specific.
621620
"""
622-
running_loop = _running_loop._loop
623-
if running_loop is not None and _running_loop._pid == os.getpid():
621+
running_loop, pid = _running_loop.loop_pid
622+
if running_loop is not None and pid == os.getpid():
624623
return running_loop
625624

626625

@@ -630,8 +629,7 @@ def _set_running_loop(loop):
630629
This is a low-level function intended to be used by event loops.
631630
This function is thread-specific.
632631
"""
633-
_running_loop._pid = os.getpid()
634-
_running_loop._loop = loop
632+
_running_loop.loop_pid = (loop, os.getpid())
635633

636634

637635
def _init_event_loop_policy():
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Micro-optimize :func:`asyncio._get_running_loop` to become up to 10% faster.

0 commit comments

Comments
 (0)