import time import marshal def genData(amount=500000): for i in range(amount): yield (i, i+2, i*2, (i+1,i+4,i,4), "my string template %s" % i, 1.01*i, True) data = list(genData()) def bench(text, func, *args): times = [] for run in range(5): t0 = time.perf_counter() result = func(*args) dt = time.perf_counter() - t0 times.append(dt) print("%s: %.1f ms" % (text, min(times) * 1e3)) return result def bench_marshal(version, obj): data = bench("dumps v%s" % version, marshal.dumps, obj, version) print("data size v%s: %.1f kB" % (version, len(data) / 1024)) bench("loads v%s" % version, marshal.loads, data) print("") for version in range(5): bench_marshal(version, data)