11 Stimmen

Bester Weg, um indexierten Zugriff auf eine Python-Warteschlange zu erhalten, thread-safe

Ich habe eine Warteschlange (aus der Queue Modul), und ich möchte indizierten Zugriff darauf erhalten. (d.h., ich kann nach dem vierten Element in der Warteschlange fragen, ohne es aus der Warteschlange zu entfernen).

Ich habe gesehen, dass eine Warteschlange intern eine deque verwendet, und deque hat indizierten Zugriff. Die Frage ist, wie kann ich die deque ohne (1) Durcheinander die Warteschlange, (2) brechen Thread-Sicherheit verwenden.

13voto

Alex Martelli Punkte 805329
import Queue

class IndexableQueue(Queue):
  def __getitem__(self, index):
    with self.mutex:
      return self.queue[index]

Es ist natürlich entscheidend, den Mutex freizugeben, ob die Indizierung erfolgreich ist oder einen IndexError auslöst, und ich verwende eine with Erklärung dazu. In älteren Python-Versionen, try / finally würde für den gleichen Effekt verwendet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X