from functools import lru_cache import gc import perf def lru_bench(loops, n, m): @lru_cache(maxsize=m) def f(x): return x t0 = perf.perf_counter() for _ in range(loops): for j in range(n): f(j) t1 = perf.perf_counter() return t1 - t0 def gc_bench(loops, n): @lru_cache(maxsize=n) def f(x): return x for i in range(n): f(i) t0 = perf.perf_counter() for _ in range(loops): gc.collect() t1 = perf.perf_counter() return t1 - t0 runner = perf.Runner() runner.bench_time_func('lru_10_100', lru_bench, 10, 100, inner_loops=10) runner.bench_time_func('lru_100_100', lru_bench, 100, 100, inner_loops=100) runner.bench_time_func('lru_1000_100', lru_bench, 1000, 100, inner_loops=1000) runner.bench_time_func('lru_100_1000', lru_bench, 100, 1000, inner_loops=100) runner.bench_time_func('lru_1000_1000', lru_bench, 1000, 1000, inner_loops=1000) runner.bench_time_func('lru_10000_1000', lru_bench, 10000, 1000, inner_loops=10000) runner.bench_time_func('gc(10000)', gc_bench, 10000) runner.bench_time_func('gc(100000)', gc_bench, 100000) runner.bench_time_func('gc(1000000)',gc_bench,1000000)