


Nicht blockierende Lesevorgänge für die Standardausgabe von Unterprozessen
Wenn Sie das Unterprozessmodul verwenden, um Unterprozesse zu initiieren und eine Verbindung zu ihren Standardausgabeströmen herzustellen, ist dies der Fall Dies ist für die Durchführung nicht blockierender Lesevorgänge unerlässlich, um die Reaktionsfähigkeit des Programms aufrechtzuerhalten. Dieser Artikel befasst sich mit Techniken, um nicht blockierende Lesevorgänge auf Standardausgaben von Unterprozessen zu erreichen oder die Datenverfügbarkeit vor dem Aufruf von .readline zu bewerten.
Traditioneller Blockierungsansatz
Lesen Sie normalerweise weiter Die Standardausgabe blockiert, d. h. die Ausführung wird angehalten, bis Daten verfügbar sind. Dies wird unten demonstriert:
import subprocess p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()
Bei diesem Ansatz wird die Ausführung jedoch ins Stocken geraten, wenn keine Daten sofort im Stream vorhanden sind.
Blockierende Lesevorgänge mit Queue.get_nowait überwinden ()
Um blockierende Lesevorgänge zu umgehen, besteht ein zuverlässiger plattformübergreifender Ansatz darin, das Queue-Modul und seine Funktionen zu verwenden get_nowait()-Methode. Diese Methode geht elegant mit dem Fehlen von Daten im Stream um und ermöglicht nicht blockierende Lesevorgänge:
import sys from subprocess import PIPE, Popen from threading import Thread from queue import Queue, Empty ON_POSIX = 'posix' in sys.builtin_module_names def enqueue_output(out, queue): for line in iter(out.readline, b''): queue.put(line) out.close() p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX) q = Queue() t = Thread(target=enqueue_output, args=(p.stdout, q)) t.daemon = True # thread dies with the program t.start() try: line = q.get_nowait() except Empty: print('no output yet') else: # got line # ... do something with line
Bei diesem Ansatz wird ein separater Thread erzeugt, um die Ausgabe der Standardausgabe des Unterprozesses kontinuierlich in die Warteschlange einzureihen. Der Hauptthread kann dann nicht blockierende Lesevorgänge durchführen, indem er get_nowait() aufruft. Wenn die Warteschlange leer ist, kehrt der Aufruf ohne Blockierung zurück, sodass der Hauptthread fortfahren kann.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Lesevorgänge aus der Standardausgabe eines Unterprozesses erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

SlicingPapythonListisDoneUsingthesyntaxlist [Start: Stop: Stufe] .here'Showitworks: 1) StartIndexoFtheFirstelementtoinclude.2) stopiStheIndexoFtheFirstelementtoexclude.3) StepisTheincrementBetweenelesfulFulForForforexcractioningPorporionsporporionsPorporionsporporesporsporsporsporsporsporsporsporsporionsporsPorsPorsPorsPorsporsporsporsporsporsporsAntionsporsporesporesporesporsPorsPorsporsPorsPorsporsporspors,

Numpyallowsforvariousoperationssonarrays: 1) BasicarithmeticliKeaddition, Subtraktion, Multiplikation und Division; 2) AdvancedoperationssuchasmatrixMultiplication;

Arraysinpython, insbesondere ThroughNumpyandpandas, areessentialfordataanalyse, öfterspeedandeffizienz.1) numpyarraysenableAnalysHandlingoflargedatasets und CompompexoperationslikemovingAverages.2) Pandasextendsnumpy'ScapaBilitiesWithDaTataforsForstruc

ListsandNumPyarraysinPythonhavedifferentmemoryfootprints:listsaremoreflexiblebutlessmemory-efficient,whileNumPyarraysareoptimizedfornumericaldata.1)Listsstorereferencestoobjects,withoverheadaround64byteson64-bitsystems.2)NumPyarraysstoredatacontiguou

TensurepythonscriptsBehavectelyAcrossdevelopment, Staging und Produktion, UsethesStrategien: 1) Umweltvariablenforsimplesettings, 2) configurationFilesForComplexSetups und 3) dynamikloadingForAdaptability.eachMethodofferiqueNefits und Requiresca

Die grundlegende Syntax für die Python -Liste ist die Liste [START: STOP: STEP]. 1.Start ist der erste Elementindex, 2.Stop ist der erste Elementindex, und 3.Step bestimmt die Schrittgröße zwischen den Elementen. Scheiben werden nicht nur zum Extrahieren von Daten verwendet, sondern auch zum Ändern und Umkehrlisten.

ListSoutPer -CharakterArraysin: 1) Dynamics und Dynamics und 3), 2) StoringHeterogenData und 3) MemoryefficiencyForSparsedata, ButmayHavesLightPerformanceCostIncustonTectorationOperationen.

Toconvertapythonarraytoalist, Usethelist () constructororageneratorexpression.1) ImportThearrayModuleandCreateanarray.2) Uselist (arr) oder [xForxinarr] Toconvertittoalist in Betracht, überlegt Performance undMoryefficiencyForlargedatasets.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6
Visuelle Webentwicklungstools

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version
