documentazione Python per Popen stati:Qualcuno può spiegare deadlock del buffer del tubo?
Attenzione Usare comunicare() anziché .stdin.write, .stdout.read o .stderr.read evitare deadlock dovuti ad uno qualsiasi degli altri buffer OS tubazione di riempimento e bloccare il processo figlio.
Ora, sto cercando di capire come può verificarsi questo stallo e perché.
Il mio modello mentale: subproccess produce qualcosa a stdout/err, che viene memorizzato nel buffer e dopo che il buffer è stato riempito, viene svuotato allo stdout/err di subproccess, che viene inviato tramite pipe al processo padre.
Da quanto riportato nella documentazione, pipe ha il proprio buffer e al termine del riempimento o del sottoprocesso viene scaricato per il processo padre.
In entrambi i casi (con buffer di tubi o non), non sono completamente sicuro di come si possa verificare un deadlock. L'unica cosa che mi viene in mente è una sorta di processo "globale" per il buffer del pipe del sistema operativo, che suona strano. Un altro è che più processi condivideranno la stessa pipa, cosa che non dovrebbe avvenire da sola.
Qualcuno può spiegarlo?
Questo è quello di cui non ero così sicuro. Grazie. – Almad