Skip to content

Instantly share code, notes, and snippets.

@barseghyanartur
Forked from marians/bench.py
Created April 22, 2020 11:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save barseghyanartur/1e8b84bbd4c2783201f96f850d04882e to your computer and use it in GitHub Desktop.
Save barseghyanartur/1e8b84bbd4c2783201f96f850d04882e 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