import struct import time def bench_iter_unpack(buf, iters): for i in range(iters): list(struct.iter_unpack('I', buf)) def grouper(seq, size): for i in range(0, len(seq), size): yield seq[i: i + size] def bench_grouper(buf, iters): for i in range(iters): unpack = struct.Struct('I').unpack [unpack(chunk)[0] for chunk in grouper(buf, 4)] if __name__ == "__main__": buf = b"1234" * 100 iters = 10000 for bench_func in (bench_iter_unpack, bench_grouper): t1 = time.time() bench_func(buf, iters) t2 = time.time() print("%s -> %.1f ms." % (bench_func.__name__, (t2 - t1) * 1000))