Skip to content

Instantly share code, notes, and snippets.

@michilu
Forked from kumagi/lru.py
Created October 12, 2012 00:04
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michilu/3876516 to your computer and use it in GitHub Desktop.
Save michilu/3876516 to your computer and use it in GitHub Desktop.
python lru benchmarks
#!/usr/bin/env python
from functools32 import lru_cache
from time import time
import random
import sys
def benchtime(fn):
oldtime = time()
fn()
return time() - oldtime
N = int(sys.argv[1])
size = int(sys.argv[2])
@lru_cache(size)
def cache(x):
return x
def random_generate():
for i in range(N):
yield random.randint(0,N)
random.seed("")
L = list(random_generate())
@benchtime
def put_bench():
for i in xrange(N):
cache(i)
@benchtime
def success_get_bench():
for i in xrange(N):
cache(i)
@benchtime
def fail_get_bench():
for i in xrange(N, N*2):
cache(i)
@benchtime
def get_bench():
for i in L:
cache(i)
print N,"items for", size, "entry put ", put_bench, "sec"
print N,"items for", size, "entry get ", get_bench, "sec"
print N,"items for", size, "entry suc_get ", success_get_bench, "sec"
print N,"items for", size, "entry fail_get ", fail_get_bench, "sec"
#!/usr/bin/env python
from lru import LRUCache
from time import time
import random
import sys
def benchtime(fn):
oldtime = time()
fn()
return time() - oldtime
N = int(sys.argv[1])
size = int(sys.argv[2])
cache = LRUCache(size)
def random_generate():
for i in xrange(N):
yield random.randint(0,N)
random.seed("")
L = list(random_generate())
@benchtime
def put_bench():
for i in xrange(N):
cache[i] = i
@benchtime
def success_get_bench():
for i in xrange(N):
try:
cache[i]
except KeyError:
pass
@benchtime
def fail_get_bench():
for i in xrange(N, N*2):
try:
cache[i]
except KeyError:
pass
@benchtime
def put_overwrite_bench():
for i in xrange(N):
cache[i] = i+1
@benchtime
def put_random_bench():
for i in L:
cache[i] = i+2
@benchtime
def get_bench():
for i in L:
try:
cache[i]
except KeyError:
pass
print N,"items for", size, "entry put ", put_bench, "sec"
print N,"items for", size, "entry put_ovw ", put_overwrite_bench, "sec"
print N,"items for", size, "entry put_rnd ", put_random_bench, "sec"
print N,"items for", size, "entry get ", get_bench, "sec"
print N,"items for", size, "entry suc_get ", success_get_bench, "sec"
print N,"items for", size, "entry fail_get ", fail_get_bench, "sec"
#!/usr/bin/env python
from pylru import lrucache
from time import time
import random
import sys
def benchtime(fn):
oldtime = time()
fn()
return time() - oldtime
N = int(sys.argv[1])
size = int(sys.argv[2])
cache = lrucache(size)
def random_generate():
for i in xrange(N):
yield random.randint(0,N)
random.seed("")
L = list(random_generate())
@benchtime
def put_bench():
for i in xrange(N):
cache[i] = i
@benchtime
def success_get_bench():
for i in xrange(N):
try:
cache[i]
except KeyError:
pass
@benchtime
def fail_get_bench():
for i in xrange(N, N*2):
try:
cache[i]
except KeyError:
pass
@benchtime
def put_overwrite_bench():
for i in xrange(N):
cache[i] = i+1
@benchtime
def put_random_bench():
for i in L:
cache[i] = i+2
@benchtime
def get_bench():
for i in L:
try:
cache[i]
except KeyError:
pass
print N,"items for", size, "entry put ", put_bench, "sec"
print N,"items for", size, "entry put_ovw ", put_overwrite_bench, "sec"
print N,"items for", size, "entry put_rnd ", put_random_bench, "sec"
print N,"items for", size, "entry get ", get_bench, "sec"
print N,"items for", size, "entry suc_get ", success_get_bench, "sec"
print N,"items for", size, "entry fail_get ", fail_get_bench, "sec"
#!/usr/bin/env python
from repoze.lru import LRUCache
from time import time
import random
import sys
def benchtime(fn):
oldtime = time()
fn()
return time() - oldtime
N = int(sys.argv[1])
size = int(sys.argv[2])
cache = LRUCache(size)
def random_generate():
for i in xrange(N):
yield random.randint(0,N)
random.seed("")
L = list(random_generate())
@benchtime
def put_bench():
for i in xrange(N):
cache.put(i,i)
@benchtime
def success_get_bench():
for i in xrange(N):
try:
cache.get(i)
except KeyError:
pass
@benchtime
def fail_get_bench():
for i in xrange(N, N*2):
try:
cache.get(i)
except KeyError:
pass
@benchtime
def put_overwrite_bench():
for i in xrange(N):
cache.put(i, i+1)
@benchtime
def put_random_bench():
for i in L:
cache.put(i, i+2)
@benchtime
def get_bench():
for i in L:
try:
cache.get(i)
except KeyError:
pass
print N,"items for", size, "entry put ", put_bench, "sec"
print N,"items for", size, "entry put_ovw ", put_overwrite_bench, "sec"
print N,"items for", size, "entry put_rnd ", put_random_bench, "sec"
print N,"items for", size, "entry get ", get_bench, "sec"
print N,"items for", size, "entry suc_get ", success_get_bench, "sec"
print N,"items for", size, "entry fail_get ", fail_get_bench, "sec"
$ ./lru_timeit.py 10000 256
10000 items for 256 entry put 0.298005819321 sec
10000 items for 256 entry put_ovw 0.302867889404 sec
10000 items for 256 entry put_rnd 0.336133003235 sec
10000 items for 256 entry get 0.0905029773712 sec
10000 items for 256 entry suc_get 0.0876998901367 sec
10000 items for 256 entry fail_get 0.0825998783112 sec
$ ./pylru_timeit.py 10000 256
10000 items for 256 entry put 0.0539979934692 sec
10000 items for 256 entry put_ovw 0.0542681217194 sec
10000 items for 256 entry put_rnd 0.0558698177338 sec
10000 items for 256 entry get 0.0423328876495 sec
10000 items for 256 entry suc_get 0.0421359539032 sec
10000 items for 256 entry fail_get 0.0419249534607 sec
$ ./repoze_lru_timeit.py 10000 256
10000 items for 256 entry put 0.0815148353577 sec
10000 items for 256 entry put_ovw 0.0860638618469 sec
10000 items for 256 entry put_rnd 0.102804899216 sec
10000 items for 256 entry get 0.0685160160065 sec
10000 items for 256 entry suc_get 0.0639691352844 sec
10000 items for 256 entry fail_get 0.0657799243927 sec
$ ./functools_timeit.py 10000 256
10000 items for 256 entry put 0.277734041214 sec
10000 items for 256 entry get 0.273926019669 sec
10000 items for 256 entry suc_get 0.279987096786 sec
10000 items for 256 entry fail_get 0.278277873993 sec
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment