Frage

Ich möchte anstehen

lambda : Popen(.....)

Zu einem späteren Zeitpunkt anrufen/warten. Dann fügen Sie der Warteschlange noch etwas mehr zu Popens hinzu und konsumieren Sie sie erneut und so weiter.

Das Hauptwarteschlangenmodul kümmert sich sehr um die Synchronisation, und dies lässt die API an Stellen etwas seltsam anfühlen. Es interessiert mich nicht um die Synchronisierung (ein einziges Thread -Programm, Popen macht einfach ihre Arbeit und mache Ausnahme auf Fehler und sie beeinflussen die Umgebung nicht auf wichtige Weise (sie generieren Dateien).

Sollte ich nur einen Generator verwenden, den ich zu einem späteren Zeitpunkt hinzufüge? Wenn ja, was ist ein guter Weg, um Generatoren Elemente hinzuzufügen, wenn sie anrufen

gena = itertools.chain(gena,[item))

Jedes Mal scheint verschwenderisch.

War es hilfreich?

Lösung

Ja, Sie können ein Deque (sammeln.deque) verwenden, eine Liste, die Sie an beiden Enden effizient schieben und popieren können. Sie können auch eine Liste verwenden und sich keine Sorgen um die Ineffizienz machen, da dies wahrscheinlich keine Rolle spielt.

Andere Tipps

Sie können verwenden Sammlung.Deque:

from collections import deque

queue = deque()
queue.append(new) # append
current = queue.popleft() # first item

Da Sie keine Sorgen um Multi-Threading machen, scheint die logische Entscheidung zu sein Sammlung.Deque.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top