from multiprocessing import * latin = str SENTINEL = latin('') def _read_until_sentinel(conn): recv_list = [] for msg in iter(conn.recv_bytes, SENTINEL): recv_list.append(msg) return latin('').join(recv_list) def _echo(conn): msg = _read_until_sentinel(conn) conn.send_bytes(msg) conn.send_bytes(SENTINEL) conn.close() def main(): conn, child_conn = Pipe() p = Process(target=_echo, args=(child_conn,)) p.daemon = True p.start() really_big_msg = latin('X') * (1024 * 1024 * 128) conn.send_bytes(really_big_msg) conn.send_bytes(SENTINEL) # tell child to quit recv = _read_until_sentinel(conn) assert recv == really_big_msg child_conn.close() if __name__ == "__main__": main()