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

Merged
merged 11 commits into from
Dec 22, 2022

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
    Configuration menu
    Copy the full SHA
    76cbbc6 View commit details
    Browse the repository at this point in the history

Commits on Dec 20, 2022

  1. Configuration menu
    Copy the full SHA
    c7af32b View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    5f33beb View commit details
    Browse the repository at this point in the history
  3. Optimize also the common case of the Python implementation of asyncio…

    ….current_task for ~40% speedup
    itamaro committed Dec 20, 2022
    Configuration menu
    Copy the full SHA
    37072a1 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    5a8a8fd View commit details
    Browse the repository at this point in the history

Commits on Dec 21, 2022

  1. Configuration menu
    Copy the full SHA
    8f0f80a View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    04bf985 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    637dfa7 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    c96db2c View commit details
    Browse the repository at this point in the history

Commits on Dec 22, 2022

  1. Configuration menu
    Copy the full SHA
    bdeb553 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    391db59 View commit details
    Browse the repository at this point in the history