Skip to content

Instantly share code, notes, and snippets.

@crazyguitar
Forked from marians/bench.py
Created June 15, 2024 02:06
Show Gist options
  • Save crazyguitar/ae11f2e8f44e7640867dcebb6c945955 to your computer and use it in GitHub Desktop.
Save crazyguitar/ae11f2e8f44e7640867dcebb6c945955 to your computer and use it in GitHub Desktop.
Benchmarking serialization/unserialization in python using json, pickle and cPickle
import cPickle
import pickle
import json
import random
from time import time
from hashlib import md5
test_runs = 1000
def float_list():
n = 1000
d = []
for i in range(n):
d.append(random.randrange(0, 99) + random.random())
return d
def int_list():
n = 1000
d = []
for i in range(n):
d.append(random.randrange(0, 9999))
return d
def str_list():
n = 1000
d = []
for i in range(n):
d.append(md5(str(random.random())).hexdigest())
return d
if __name__ == "__main__":
payload = {
"float": float_list(),
"int": int_list(),
"str": str_list()
}
for payload_type in payload:
data = payload[payload_type]
start = time()
for i in range(test_runs):
serialized = json.dumps(data)
duration = time() - start
print("json,serialize,%s,%.3f" % (payload_type, duration))
start = time()
for i in range(test_runs):
unserialized = json.loads(serialized)
duration = time() - start
print("json,unserialize,%s,%.3f" % (payload_type, duration))
start = time()
for i in range(test_runs):
serialized = pickle.dumps(data)
duration = time() - start
print("pickle,serialize,%s,%.3f" % (payload_type, duration))
start = time()
for i in range(test_runs):
unserialized = pickle.loads(serialized)
duration = time() - start
print("pickle,unserialize,%s,%.3f" % (payload_type, duration))
start = time()
for i in range(test_runs):
serialized = cPickle.dumps(data)
duration = time() - start
print("cPickle,serialize,%s,%.3f" % (payload_type, duration))
start = time()
for i in range(test_runs):
unserialized = cPickle.loads(serialized)
duration = time() - start
print("cPickle,unserialize,%s,%.3f" % (payload_type, duration))

Result from my MacBook using Python 2.7.5:

module direction data type Duration (sec)
json serialize int 0.103
json unserialize int 0.134
pickle serialize int 2.462
pickle unserialize int 2.614
cPickle serialize int 0.185
cPickle unserialize int 0.288
json serialize float 1.197
json unserialize float 0.392
pickle serialize float 3.931
pickle unserialize float 2.144
cPickle serialize float 0.699
cPickle unserialize float 0.717
json serialize str 0.137
json unserialize str 0.368
pickle serialize str 4.702
pickle unserialize str 4.945
cPickle serialize str 0.572
cPickle unserialize str 0.631
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment