Sono quasi sicuro che lo farei usando la funzione os.plock (op), ma non ho idea di come. Inoltre, se c'è un modo migliore, sarei grato di scoprirlo. I frammenti di codice sono benvenuti.Come si condividono i dati tra un processo genitore e un processo figlio biforcuto in Python?
risposta
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()
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.
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.
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()
- 1. Rilevamento figlio processo genitore 'morte in Python
- 2. tempo impiegato dal processo figlio biforcuto
- 3. Uccidere un figlio biforcuto uccide il genitore?
- 4. Processo Python biforcuto da NodeJS - Alternativa a process.send() per Python?
- 5. Come si de-elevare i privilegi di un processo figlio
- 6. Come creare un processo figlio a seconda del suo genitore?
- 7. come ottenere l'id di processo (pid) dal processo figlio biforcuto nello script di shell
- 8. Processo figlio multiplo
- 9. modifica genitore di un processo
- 10. Monitoraggio del decesso di un processo figlio
- 11. Come ottenere variabili condivise tra processo figlio e genitore durante l'utilizzo di fork in perl
- 12. Come uccidere un processo figlio python creato con subprocess.check_output() quando il genitore muore?
- 13. Utilizzo memoria di un processo figlio?
- 14. Multiprocessing di Python - AssertionError: può unire solo un processo figlio
- 15. Come restituisce fork() per il processo figlio
- 16. Comunicazione di processo in Python
- 17. Come posso acquisire l'output stdout di un processo figlio?
- 18. L'ultimo figlio biforcuto non morirà
- 19. Come uccidere un processo Python in esecuzione?
- 20. Il processo figlio inizia dopo il processo principale
- 21. Come reindirizzare il processo figlio stdout/stderr nel processo principale stdout/stderr in Java?
- 22. Ottenere la forma di un processo figlio
- 23. Condivisione di dati tra softirq e contesto di processo
- 24. visibilità Discussione tra un processo
- 25. Perché il mio processo genitore non vede l'output del figlio finché non esce?
- 26. Come staccare un processo figlio generato in uno script Node.js?
- 27. ottenendo pid del processo figlio
- 28. Come ottenere il processo figlio dal processo principale
- 29. Ignora il segnale SIGINT nel processo figlio
- 30. come generare un nuovo processo indipendente in python
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