from io import BytesIO
from cStringIO import StringIO
from six import BytesIO as six_BytesIO
data_small = b'foo'*1000
data_large = b'foo'*1000000
%timeit -n 100000 BytesIO(data_small)
%timeit -n 100000 StringIO(data_small)
%timeit -n 100000 six_BytesIO(data_small)
1000000 loops, best of 3: 401 ns per loop 1000000 loops, best of 3: 345 ns per loop 1000000 loops, best of 3: 1.24 µs per loop
%timeit -n 100000 BytesIO(data_large)
%timeit -n 100000 StringIO(data_large)
%timeit -n 100000 six_BytesIO(data_large)
100000 loops, best of 3: 161 µs per loop 100000 loops, best of 3: 395 ns per loop 100000 loops, best of 3: 1.28 µs per loop
bio_small = BytesIO(data_small)
sio_small = StringIO(data_small)
six_small = six_BytesIO(data_small)
bio_large = BytesIO(data_large)
sio_large = StringIO(data_large)
six_large = six_BytesIO(data_large)
bio_small.seek(0)
sio_small.seek(0)
six_small.seek(0)
%timeit -n 1000 bio_small.read(1)
%timeit -n 1000 sio_small.read(1)
%timeit -n 1000 six_small.read(1)
%timeit -n 100000 bio_large.read(1)
%timeit -n 100000 sio_large.read(1)
%timeit -n 100000 six_large.read(1)
1000 loops, best of 3: 422 ns per loop 1000 loops, best of 3: 410 ns per loop 1000 loops, best of 3: 1.26 µs per loop 100000 loops, best of 3: 298 ns per loop 100000 loops, best of 3: 192 ns per loop 100000 loops, best of 3: 860 ns per loop
bio_small.seek(0)
sio_small.seek(0)
six_small.seek(0)
bio_large.seek(0)
sio_large.seek(0)
six_large.seek(0)
%timeit -n 100 bio_small.read(10)
%timeit -n 100 sio_small.read(10)
%timeit -n 100 six_small.read(10)
%timeit -n 100 bio_large.read(1000)
%timeit -n 100 sio_large.read(1000)
%timeit -n 100 six_large.read(1000)
100 loops, best of 3: 279 ns per loop 100 loops, best of 3: 281 ns per loop 100 loops, best of 3: 1.15 µs per loop 100 loops, best of 3: 360 ns per loop 100 loops, best of 3: 360 ns per loop 100 loops, best of 3: 1.35 µs per loop