Estoy bastante seguro de que uno haría esto usando la función os.plock (op), pero no tengo idea de cómo. Además, si hay una mejor manera, estaría agradecido de averiguarlo. Los fragmentos de código son muy bienvenidos.¿Cómo compartes los datos entre un padre y el proceso hijo bifurcado en Python?
Respuesta
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()
¡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.
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.
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()
- 1. ¿Cómo se compartirían los datos entre un padre y el proceso hijo bifurcado en Haskell?
- 2. tiempo tomado por proceso hijo bifurcado
- 3. Almacenar datos jerárquicos (padre/hijo) en Python/Django: ¿alternativa MPTT?
- 4. Proceso hijo múltiple
- 5. ¿Cómo ordeno por padre y luego hijo?
- 6. relaciones padre-> hijo en appengine python (bigtable)
- 7. ¿Cómo encontrar cuánta memoria se comparte entre el proceso bifurcado con copy-on-write en Linux?
- 8. Navegación padre-hijo-padre JAXB/XJC
- 9. ¿Cómo puedo hacer que un proceso hijo salga cuando lo hace el padre?
- 10. APACHE Crashing: padre: proceso hijo salido con estado 3221225477 - Reinicio
- 11. Cómo redirigir el proceso hijo stdout/stderr al proceso principal stdout/stderr en Java?
- 12. ¿Cómo de-elevar los privilegios de un proceso hijo
- 13. carriles - relaciones padre/hijo
- 14. El hijo especificado ya tiene un padre. Debe llamar a removeView() en el padre del hijo primero
- 15. ¿Cómo diseñar DB con relaciones padre-hijo?
- 16. Hacer cumplir relación padre-hijo en C# y .Net
- 17. ¿Cómo rastrear el proceso hijo usando strace?
- 18. ¿Cómo finaliza Ctrl-C un proceso hijo?
- 19. Android: el hijo especificado ya tiene un padre. Debe llamar a removeView() en el padre del hijo primero
- 20. Convierta las coordenadas entre UIView padre/hijo después de CGAffineTransform
- 21. de CSS, padre e hijo
- 22. Enviar el objeto socket al proceso de ejecución bifurcado (multiprocesamiento.Queue)
- 23. Como llegar padre y sólo un nodo hijo
- 24. nohup para el proceso hijo en Unix
- 25. Uso de los genéricos en una relación padre-hijo
- 26. Relación autorreferencial/padre-hijo en Entity Framework
- 27. ¿Cómo puedo capturar la salida stdout de un proceso hijo?
- 28. XML: hijo y padre con el mismo nombre
- 29. padre-hijo en la misma mesa
- 30. ¿Uso de memoria de un proceso hijo?
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