import bz2, threading, array fac = lambda b: array.array("c", b) fac = bytearray bz2c = bz2.BZ2Compressor() # Span at least a whole arena (256KB long) junk_len = 512 * 1024 junk = fac(b"a") * junk_len empty = fac(b"") buf = empty[:] def f(): bz2c.compress(buf) for x in range(50): buf[:] = junk t = threading.Thread(target=f) t.start() buf[:] = empty t.join()