Ich habe viele Themen gefunden, die mehr oder weniger mit diesem Thema zu tun haben und immer noch fast nichts wie vollständige Antwort ... Ich bin auf der Suche nach Ihrem Rat darauf.Wenn Popen.communicate() nicht genug ist?
Also, hier ist mein Problem: Ich muss wirklich mit einem Subprozess auf beide Arten kommunizieren: Ich muss eine Menge Daten zu seinem Eingang schreiben und seine Ausgabe im laufenden Betrieb erhalten. Es gibt keinen Weg darum herum. Mein Subprozess ist ein berühmter 'lahmer' MP3-Encoder, der Input ist ein PCM-Sound von einer Stunde oder mehr, der von meiner Funktion erzeugt wird. Die Ausgabe ist die MP3-Datei, die auch Chunk für Chunk gesendet werden muss, ohne auf den Encoder zu warten.
Laut der Dokumentation wird Popen.communicate() mir nicht helfen, IPC in Dutzenden oder Hunderten von Megabyte zu verarbeiten. Zur gleichen Zeit, wie ich von hier gelernt habe, ist es sehr gefährlich zu versuchen, diesen Ansatz von Grund auf neu zu erstellen, da viele Fallstricke warten: Deadlocks, Pufferung, Prozessmanagement, etc.
Also meine Frage ist: Gibt es eine bekannte Lösung für diese Art von Problem: eine Python-Lib oder ein Codebeispiel, das das Problem wirklich löst? Vielleicht gibt es zumindest einen Artikel oder etwas, das klar die meisten Probleme beschreibt, denen man begegnen kann, wenn man versucht, das selbst zu lösen?
Vielen Dank im Voraus, Ilya.
Wenn ich Ihre Idee habe, muss ich drei Kindprozess starten: einen zum Erstellen von Eingabedaten und Schreiben zu lahm, einen zum Ausführen der Lahme und einen zum Abrufen der Ausgabe und zum Übertragen an den Benutzer. Was mich hier erschreckt, ist der Gedanke, dass ich die ganze überwachende Logik implementieren muss: auf Kinder warten, die Signale abfangen und Kinder am Elternausgang töten und umgekehrt usw. – izhak
Wie bei NB in Python 3 - danke, Ich werde es lesen. Leider muss diese spezielle Aufgabe auf ein paar gemeinsam genutzte Hostings laufen, wo Python 2.4 eine traurige Realität ist. – izhak
Die drei Kinder waren genau das, was ich vorhatte. Aber du hast Recht, es ist immer noch nervig zu implementieren. Die beste Diskussion der Probleme ist immer noch Advanced Programming in der UNIX-Umgebung - siehe http://www.kohala.com/start/apue.html - was ich sehr empfehlen kann. – max