mirror of
https://github.com/python/cpython.git
synced 2025-09-30 12:21:51 +00:00
bpo-31350: Optimize get_event_loop and _get_running_loop (GH-3347) (GH-3373)
* 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
(cherry picked from commit 80bbe6a7b6
)
This commit is contained in:
parent
11453524ed
commit
ff125e1aa9
2 changed files with 5 additions and 6 deletions
|
@ -611,8 +611,7 @@ _lock = threading.Lock()
|
||||||
|
|
||||||
# A TLS for the running event loop, used by _get_running_loop.
|
# A TLS for the running event loop, used by _get_running_loop.
|
||||||
class _RunningLoop(threading.local):
|
class _RunningLoop(threading.local):
|
||||||
_loop = None
|
loop_pid = (None, None)
|
||||||
_pid = None
|
|
||||||
|
|
||||||
|
|
||||||
_running_loop = _RunningLoop()
|
_running_loop = _RunningLoop()
|
||||||
|
@ -624,8 +623,8 @@ def _get_running_loop():
|
||||||
This is a low-level function intended to be used by event loops.
|
This is a low-level function intended to be used by event loops.
|
||||||
This function is thread-specific.
|
This function is thread-specific.
|
||||||
"""
|
"""
|
||||||
running_loop = _running_loop._loop
|
running_loop, pid = _running_loop.loop_pid
|
||||||
if running_loop is not None and _running_loop._pid == os.getpid():
|
if running_loop is not None and pid == os.getpid():
|
||||||
return running_loop
|
return running_loop
|
||||||
|
|
||||||
|
|
||||||
|
@ -635,8 +634,7 @@ def _set_running_loop(loop):
|
||||||
This is a low-level function intended to be used by event loops.
|
This is a low-level function intended to be used by event loops.
|
||||||
This function is thread-specific.
|
This function is thread-specific.
|
||||||
"""
|
"""
|
||||||
_running_loop._pid = os.getpid()
|
_running_loop.loop_pid = (loop, os.getpid())
|
||||||
_running_loop._loop = loop
|
|
||||||
|
|
||||||
|
|
||||||
def _init_event_loop_policy():
|
def _init_event_loop_policy():
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Micro-optimize :func:`asyncio._get_running_loop` to become up to 10% faster.
|
Loading…
Add table
Add a link
Reference in a new issue