2008-10-20 2 views

risposta

12

Subprocess sostituisce os.popen, os.system, os.spawn, popen2 e comandi. Un simple example for piping sarebbe:

p1 = Popen(["dmesg"], stdout=PIPE) 
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) 
output = p2.communicate()[0] 

Si potrebbe anche usare un memory mapped file con la bandiera = MAP_SHARED per la memoria condivisa tra i processi.

multiprocessing riassunti sia pipes e shared memory e fornisce un'interfaccia di livello superiore. Preso dalla documentazione Processing:

from multiprocessing import Process, Pipe 

def f(conn): 
    conn.send([42, None, 'hello']) 
    conn.close() 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=f, args=(child_conn,)) 
    p.start() 
    print parent_conn.recv() # prints "[42, None, 'hello']" 
    p.join() 
4

Questo è praticamente indipendente da Python! È un classico esempio di comunicazione di interpreti Unix. Una buona opzione è usare popen() per aprire una pipe tra i processi padre e figlio e passare i dati/messaggi avanti e indietro lungo la pipe.

Dai uno sguardo allo subprocess module, che può impostare automaticamente le pipe necessarie durante lo spawn dei processi figli.

1

Sono disponibili due opzioni: os.popen* nel modulo os oppure è possibile utilizzare il modulo subprocess allo stesso effetto. Il manuale di Python ha una buona documentazione ed esempi per popen e subprocess.

7

Date un'occhiata al multiprocessing nuovo modulo in Python 2.6 (disponibile anche per le versioni precedenti di un pyprocessing

Ecco un esempio dalla documentazione che illustrano le informazioni che passano con un tubo per esempio :

from multiprocessing import Process, Pipe 

def f(conn): 
    conn.send([42, None, 'hello']) 
    conn.close() 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=f, args=(child_conn,)) 
    p.start() 
    print parent_conn.recv() # prints "[42, None, 'hello']" 
    p.join() 
+0

Si potrebbe parlare del valore, array e le classi Gestore forniti da multiprocessing, che permettono la condivisione dei dati: http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes – tzot