Hi !

A new version with binary data handling. 103 seconds with 1000 data exchange.

import os, sys, time, binascii, cPickle

bpath,bname=os.path.split(sys.argv[0])

def Log(Msg,IsMaster,First=False):
    fn=sys.argv[0]+'.'+['c','m'][int(IsMaster)]+'.log'
    mode='aw'[int(First)]
    f=open(fn,mode)
    f.write('\n%s:\n'%time.time())
    f.write('%s\n'%Msg)
    f.flush()
    f.close()

def ReadTextPacket(SourceStream):
    packet=SourceStream.read(6)
    psize=int(packet)
    packet=SourceStream.read(psize)
    return packet

def WriteTextPacket(DestStream,Packet):
    Packet=str(Packet)
    DestStream.write('%06d'%len(Packet))
    DestStream.write(Packet)
    DestStream.flush()
   
import base64

def PackObj(Obj):
    pckpacket=cPickle.dumps(Obj)
    enstr=base64.encodestring(pckpacket)
    return enstr

def UnpackObj(Packet):
    pckpacket=base64.decodestring(Packet)
    obj=cPickle.loads(pckpacket)
    return obj

#s=PackObj([1,None,'A']*10)
#print s
#print UnpackObj(s)
#sys.exit()

def ReadBinPacket(SourceStream):
    txtpacket=ReadTextPacket(SourceStream)
    obj=UnpackObj(txtpacket)
    return obj

def WriteBinPacket(DestStream,Obj):
    txtpacket=PackObj(Obj)
    WriteTextPacket(DestStream,txtpacket)


if 'C' in sys.argv:
    Log('Client started',0,1)
    try:
        while 1:
            #Log('Waiting for packet',0,0)
            data="">            #Log('Packet received',0,0)
            #Log('The packet is: %s'%([data]),0,0)
            #Log('Print the result',0,0)
            WriteBinPacket(sys.stdout,"Master wrote: %s"%([data]))
            if str(data).strip()=='quit':
                Log('Quit packet received',0,0)
                break
    except Exception,E:
        Log(str(E),0,0)
    Log('Client finished',0,0)
else:
    Log('Master started',1,1)
    try:
        Log('Start subprocess',1,0)
        import time
        st=time.time()
        child_stdin,child_stdout=os.popen2(r'c:\python24\python.exe %s C'%(bname))
        for i in range(1000):
            #Log('Send packet',1,0)
            WriteBinPacket(child_stdin,['Alma'*100,i])
            #Log('Waiting for packet',1,0)
            s=ReadBinPacket(child_stdout)
            #Log('Packet is: %s'%([s]),1,0)
            #Log('Print packet',1,0)
            #print "Client's answer",[s]
            import time
            time.sleep(0.1)
        #Log('Send packet',1,0)
        WriteBinPacket(child_stdin,'quit')
        #Log('Waiting for packet',1,0)
        s=ReadBinPacket(child_stdout)
        #Log('Packet is: %s'%([s]),1,0)
        #Log('Print packet',1,0)
        #print "Client's answer",[s]
        Log('Master finished',1,0)
    except Exception,E:
        Log(str(E),1,0)
    print time.time()-st

dd


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to