2008-10-20 27 views

Respuesta

12

Subprocess reemplaza os.popen, os.system, os.spawn, popen2 y comandos. Un simple example for piping sería:

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

También es posible usar un memory mapped file con la bandera = MAP_SHARED para la memoria compartida entre los procesos.

multiprocessing resúmenes pipes y shared memory y proporciona una interfaz de nivel superior. Tomado de la documentación de procesamiento:

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

¡Esto es prácticamente independiente de Python! Es un ejemplo clásico de comunicación interproceso de Unix. Una buena opción es usar popen() para abrir un conducto entre los procesos padre e hijo, y pasar datos/mensajes de ida y vuelta a lo largo del conducto.

Eche un vistazo a subprocess module, que puede configurar los conductos necesarios automáticamente al generar procesos secundarios.

1

Tiene dos opciones: os.popen* en el módulo os, o puede usar el módulo subprocess con el mismo efecto. El manual de Python tiene documentación y ejemplos bonitos para popen y subprocess.

7

Tome un vistazo a la multiprocessing módulo nuevo en Python 2.6 (también disponible para las versiones anteriores de un pyprocessing

He aquí un ejemplo de los documentos que ilustran la información que pasa usando un tubo, por ejemplo, :

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

Se podría mencionar el valor, la matriz y las clases de administrador proporcionadas por multiprocesamiento, que permiten el intercambio de datos: http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes – tzot

Cuestiones relacionadas