ipc pickle

Janez Jere janez.jere at void.si
Mon Feb 25 12:28:02 CET 2002


Hi, I am experimenting with IPC, my current implementation is very
slow, so I am asking for some hints, how to optimize it. 
Currently I know that cStringIO would cut execution time for 30%. but
I don't want to drop unicode support

Thanks in advance, Janez

import cPickle
import StringIO
#unicode required
#import cStringIO as StringIO
import struct
import os

class Client:
    def __init__(self, file):
        self.file = file
    def read(self):
        # read length and load object
        x = os.read(self.file, 4)
        length = struct.unpack('i', x)[0]
        buf = os.read(self.file, length)
        f = StringIO.StringIO(buf)
        return cPickle.load(f)
        
class Server:
    def __init__(self, file):
        self.file = file

    def write(self, obj):
        # write length of serialozed object, write serialized object
        f = StringIO.StringIO()
        cPickle.dump(obj, f, 1)
        val = f.getvalue()
        length = len(val)
        plen = struct.pack("i", length)
        os.write(self.file, plen)
        os.write(self.file,val)

if __name__=='__main__':
    rp, wp = os.pipe()
    c = Client(rp)
    s = Server(wp)
    s.write(u'\u0161\u010durek')
    print repr(c.read())

    import time
    start = time.clock()
    for i in xrange(3000):
        s.write('a')
        c.read()
    print time.clock() - start





More information about the Python-list mailing list