The Wayback Machine - https://web.archive.org/web/20221219150830/https://github.com/python/cpython/pull/100345/commits
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-100344: Provide C implementation for asyncio.current_task #100345

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on Dec 19, 2022

  1. pythongh-100344: Provide C implementation for asyncio.current_task

    Implementing it in C makes it about 4x-6x faster
    
    Microbenchmark:
    
    ```
     # bench.py
    
    import time
    import timeit
    import asyncio
    
    ITERS: int = 10**6
    NANO: int = 10**9
    NANO_PER_ITER: float = NANO / ITERS
    
    async def main():
       # avoid load attr noise
       py_current_task = asyncio.tasks._py_current_task
       c_current_task = asyncio.tasks._c_current_task
    
       asyncio.current_task() # warmup
       py_current_task() # warmup
       c_current_task() # warmup
    
       print(
          "current_task: {}ns".format(timeit.timeit(py_current_task, number=ITERS, timer=time.process_time) * NANO_PER_ITER)
       )
       print(
          "current_task: {}ns".format(timeit.timeit(c_current_task, number=ITERS, timer=time.process_time) * NANO_PER_ITER)
       )
    
    asyncio.run(main())
    ```
    
    a few runs on MacBook Pro
    2.4 GHz 8-Core Intel Core i9
    64 GB 2667 MHz DDR4:
    
    debug build:
    
    ```
    ~/work/pyexe/main-dbg  9:57:34
    $ ./python.exe bench.py
    [py] current_task: 606.234ns
    [c] current_task: 104.47699999999993ns
    
    ~/work/pyexe/main-dbg  9:57:59
    $ ./python.exe bench.py
    [py] current_task: 631.856ns
    [c] current_task: 110.22500000000002ns
    
    ~/work/pyexe/main-dbg  9:58:08
    $ ./python.exe bench.py
    [py] current_task: 637.746ns
    [c] current_task: 105.03899999999999ns
    
    ~/work/pyexe/main-dbg  9:58:16
    $ ./python.exe bench.py
    [py] current_task: 621.3169999999999ns
    [c] current_task: 103.01300000000002ns
    ```
    
    opt build:
    
    ```
    ~/work/pyexe/main-opt  10:33:17
    $ ./python.exe bench.py
    [py] current_task: 128.743ns
    [c] current_task: 31.997999999999998ns
    
    ~/work/pyexe/main-opt  10:33:24
    $ ./python.exe bench.py
    [py] current_task: 126.388ns
    [c] current_task: 32.64599999999998ns
    
    ~/work/pyexe/main-opt  10:33:26
    $ ./python.exe bench.py
    [py] current_task: 137.053ns
    [c] current_task: 32.066999999999986ns
    
    ~/work/pyexe/main-opt  10:33:28
    $ ./python.exe bench.py
    [py] current_task: 131.17800000000003ns
    [c] current_task: 32.06600000000001ns
    ```
    itamaro committed Dec 19, 2022