Kann jemand Pipe Buffer Deadlock erklären?
Python-Dokumentation zu Popen besagt:
Warnung Verwenden Sie "communic ()" anstelle von ".stdin.write", ".stdout.read" oder ".stderr.read", um Deadlocks zu vermeiden, die darauf zurückzuführen sind, dass die anderen Pipe-Puffer des Betriebssystems den untergeordneten Prozess füllen und blockieren.
Jetzt versuche ich herauszufinden, wie und warum dieser Deadlock auftreten kann.
Mein mentales Modell: Subprozess erzeugt etwas zu stdout / err, das gepuffert wird, und nachdem der Puffer gefüllt ist, wird es zu stdout / err des Subprozesses gespült, der über die Pipe an den übergeordneten Prozess gesendet wird.
Aus welchem Dokumentationsstatus hat die Pipe ihren eigenen Puffer und wenn sie gefüllt ist oder der Unterprozess endet, wird sie an den übergeordneten Prozess übertragen.
In beiden Fällen (mit oder ohne Pipe-Puffer) bin ich mir nicht ganz sicher, wie ein Deadlock auftreten kann. Mir fällt nur eine Art "globaler" OS-Pipe-Buffer-Prozesse ein, was seltsam klingt. Ein weiterer Grund ist, dass sich mehr Prozesse dieselbe Pipe teilen, was nicht von alleine passieren sollte.
Kann das bitte jemand erklären?