Bug report
Bug description:
from threading import Thread import time class Cache: def get(self, i): return i def get(i): return i client = Cache() def bench_run(runner): s = time.monotonic_ns() for i in range(500000): runner(i) d = time.monotonic_ns() - s print(f"{d:,}") def bench_run_parallel(count, runner): tl = [] for i in range(count): t = Thread(target=bench_run, args=[runner]) tl.append(t) t.start() for t in tl: t.join() if __name__ == '__main__': print("no threading class") bench_run(client.get) print("\nthreading class") bench_run_parallel(6, client.get) print("\nno threading function") bench_run(get) print("\nthreading function") bench_run_parallel(6, get)
Processor: 2.6 GHz 6-Core Intel Core i7
PYTHON_CONFIGURE_OPTS='--disable-gil' pyenv install 3.13.0rc1
PYTHON_GIL=0 python benchmarks/run.py
Python 3.13.0rc1 experimental free-threading build (main, Sep 3 2024, 09:59:18) [Clang 15.0.0 (clang-1500.0.40.1)] on darwin
no threading class
34,626,126
threading class
313,298,115
318,659,929
319,484,384
321,183,006
320,650,898
321,589,085
no threading function
29,890,615
threading function
31,336,844
31,927,592
32,087,732
33,612,093
32,611,520
33,897,321
When using 6 threads, the instance method becomes approximately 10 times slower, while the function method shows comparable performance.
Python 3.12.5 (main, Sep 2 2024, 15:11:13) [Clang 15.0.0 (clang-1500.0.40.1)] on darwin
no threading class
27,588,484
threading class
79,383,431
113,182,075
111,067,075
107,679,440
63,825,808
92,679,231
no threading function
26,200,075
threading function
76,489,523
105,636,550
121,436,736
106,408,462
104,572,564
70,686,101
CPython versions tested on:
3.13
Operating systems tested on:
macOS
Linked PRs
- gh-123619: Add an unstable C API function for enabling deferred reference counting #123635
- gh-123619: Fix PyUnstable_Object_EnableDeferredRefcount() #151260
- [3.15] gh-123619: Fix PyUnstable_Object_EnableDeferredRefcount() (GH-151260) #151326
- [3.14] gh-123619: Fix PyUnstable_Object_EnableDeferredRefcount() (GH-151260) #151327