Skip to content

Instantly share code, notes, and snippets.

@marians
Last active June 15, 2024 02:06
Show Gist options
  • Save marians/f1314446b8bf4d34e782 to your computer and use it in GitHub Desktop.
Save marians/f1314446b8bf4d34e782 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
@CTimmerman
Copy link

Hi. I've forked, shortened, and added marshal and highest pickle protocol setting to your code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment