Skip to content

Create a connection via pipe between to processes or between to python sessions.

Notifications You must be signed in to change notification settings

derekawilson72/PythonPipeConnection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

PythonPipeConnection

Create a connection via pipe between to processes or between to python sessions.

##Purpose Python processes need to share data and/or Python users need to share data while processes are running in paralles. The pipeHandler module allows users to connect their data with data pipes while not having to wait or hold up other processes. This proves especially useful in web services such as web2py, django and Flask.

##script to test pipeConnector

    import pipeHandler
    parent_conn,child_conn=pipeHandler.Pipe()  ##create pipe parent and child
    pH1=pipeHandler.pipeConnector()            ##create pipeConnector
    pH1.connectPipe(parent_conn)               ##used parent conn as the pipe connection for pipeConnector
    pH1.recvPipeData()                         ##start receiving thread
    child_conn.send(['hello parent',3,4,5])    ##send sample data string
    pH1.data ##see the data on the other end 
    ##['hello parent',3,4,5]
    proc1=pipeHandler.Process(target=pipeHandler.doSampleStuff,args=(child_conn,))
    proc1.start()
    pH1.data ##see the data on the other end as the function does it's thing
    #['to infinity and beyond', 11365, 22730]
    #['to infinity and beyond', 11495, 22990]
    #....
    #['to infinity and beyond', 11569, 23138]
    

###to test pickled pipe connector between two shells

    
    # in shell 1
    from pipeHandler import pickledPipeConnector
    from multiprocessing.reduction import reduce_connection
    from multiprocessing import Pipe, current_process
    import pickle

    reader, writer = Pipe()
    pickled_writer = pickle.dumps(reduce_connection(writer))
    passKey=current_process().authkey
    ppC1=pickledPipeConnector(pickled_writer,passKey)
    ppC1.conn=reader
    ppC1.recvPipeData()


    # in shell 2
    from pipeHandler import pickledPipeConnector
    from multiprocessing.reduction import rebuild_connection
    from multiprocessing import Pipe, current_process
    import pickle
    
    #use the passkey and pickled writer from shell 1
    ##here are examples
    passKey='\xe4A-\x18\xd7;&\xdd!5\xa9\xf7\xae\xd5\xd6v\x0c\xb2\x92\x88\x1a\xb3.av\xde\x93s\xd0\x1f!\xf6'
    pickled_writer="(cmultiprocessing.reduction\nrebuild_connection\np0\n((S'/tmp/pymp-_rZWHC/listener-l6qouC'\np1\nI4\nI00\ntp2\nI01\nI01\ntp3\ntp4\n."
    current_process().authkey=passKey   #import passkey
    upw = pickle.loads(pickled_writer)  #import pickled string
    writer = upw[0](upw[1][0],upw[1][1],upw[1][2])
    # writer = rebuild_connection(upw[1][0],upw[1][1],upw[1][2])
    ppC2=pickledPipeConnector(pickled_writer,passKey)
    ppC2.conn=writer
    ppC2.recvPipeData()

    # # now do (almost) any send and recv
    # #in shell 2
    import numpy
    writer.send(['this is data', numpy.arange(10)])


    # #in shell one
    ppC1.data  ##should produce the data
    ['this is data', array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])]
    reader.send('hello back')

    # #in shell two
    ppC2.data ##should produce the message
    'hello back'

About

Create a connection via pipe between to processes or between to python sessions.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published