]> granicus.if.org Git - python/commitdiff
bpo-31350: Optimize get_event_loop and _get_running_loop (#3347)
authorjimmylai <albert_chs@yahoo.com.tw>
Wed, 6 Sep 2017 00:36:59 +0000 (17:36 -0700)
committerYury Selivanov <yury@magic.io>
Wed, 6 Sep 2017 00:36:59 +0000 (20:36 -0400)
* 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
Misc/NEWS.d/next/Library/2017-09-05-10-30-48.bpo-31350.dXJ-7N.rst [new file with mode: 0644]

index 6af91374ecfacee999c073976f6798a5e99962b3..03af6994e94ae965ab6e83d5ac60af69b159bae8 100644 (file)
@@ -606,8 +606,7 @@ _lock = threading.Lock()
 
 # 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 (file)
index 0000000..299cf3c
--- /dev/null
@@ -0,0 +1 @@
+Micro-optimize :func:`asyncio._get_running_loop` to become up to 10% faster.