#!/usr/bin/python3.3 import os, threading try: from cPickle import Pickler, Unpickler except ImportError: from pickle import Pickler, Unpickler def unpickler(load, ack): while 1: try: load() # C implementation hangs on Python 3 # when it processes a message of 4096*n+1 bytes except EOFError: break ack() lock = threading.Lock() lock.acquire() r, w = os.pipe() stdout = os.fdopen(w, 'wb') pickler = Pickler(stdout, 2) load = Unpickler(os.fdopen(r, 'rb')).load t = threading.Thread(target=unpickler, args=(load, lock.release)) t.daemon = 1 t.start() for i in 4085, 4086, 4088, 4087: os.write(2, (u"dump(%u)\n" % i).encode()) pickler.dump(' ' * i) stdout.flush() pickler.clear_memo() lock.acquire() stdout.close() t.join()