Python – grundlegende Verwendung von queue [queue] task_done() und join()

I. Einleitung

task_done()Ist die vom PythonModul bereitgestellte Methode queue, um den Warteschlangenmanager darüber zu informieren, dass ein Element in der Warteschlange verarbeitet wurde.

queue.task_done()Ist Queueeine Methode des Objekts, die verwendet wird, um Queuedas Objekt darüber zu informieren, dass ein Element in der Warteschlange verarbeitet wurde. Wenn der Produzent bei Verwendung des Queue-Objekts Daten in die Warteschlange stellt, muss der Verbraucher normalerweise die Daten aus der Warteschlange nehmen und verarbeiten. Nachdem der Verbraucher ein Datenelement verarbeitet hat, kann er queue.task_done()die Methode verwenden, um die Warteschlange zu benachrichtigen, sodass Queuedas Objekt wissen kann, welches Element in der Warteschlange verarbeitet wurde.

Wenn wir mit Warteschlangen arbeiten, verwenden wir normalerweise put()die Methode, um Elemente zur Warteschlange hinzuzufügen, und verwenden dann die Methode get(), um Elemente zur Verarbeitung aus der Warteschlange abzurufen. Nach der Verarbeitung eines Elements können wir task_done()die Methode verwenden, um den Warteschlangenmanager darüber zu informieren, dass das Element verarbeitet wurde.

Wenn wir join()die Methode verwendet haben, um auf die Verarbeitung aller Elemente zu warten, kehrt diese Methode zurück, nachdem alle Elemente verarbeitet wurden.

2. Grundlegende Verwendung

Beispielcode

import queue
import threading

def worker(q):
    while True:
        item = q.get()
        print("Processing", item)
        q.task_done()

if __name__ == '__main__':
    q = queue.Queue()
    for i in range(5):
        q.put(i)

    for i in range(3):
        t = threading.Thread(target=worker, args=(q,))
        t.daemon = True
        t.start()

    q.join()
    print("All items processed.")

Im obigen Beispielcode erstellen wir zunächst eine Warteschlange q und fügen ihr 5 Elemente hinzu. Anschließend erstellen wir drei Threads, von denen jeder worker()eine Funktion verwendet, um ein Element aus der Warteschlange abzurufen, und task_done()eine Methode, um es zu entsorgen. Da wir join()die Methode verwendet haben, um auf die Verarbeitung aller Elemente zu warten, wird nach der Verarbeitung aller Elemente schließlich „Alle Elemente verarbeitet“ ausgegeben.

Operationsergebnis:
Fügen Sie hier eine Bildbeschreibung ein

In diesem Beispiel task_done()wird die Methode jedes Mal einmal aufgerufen, wenn ein Element aus der Warteschlange entfernt wird, sodass der Warteschlangenmanager schließlich weiß, dass alle Elemente verarbeitet wurden.

3. Verwendung der Echtzeitbenachrichtigung über den Abschluss einer Aufgabe

Beispielcode zum Lesen und Abrufen:

Hier werden ein Produzent und ein Verbraucher definiert und QueueObjekte zur Datenübertragung verwendet. Der Produzent stellt 10 Datenelemente in die Warteschlange und hält zwischen jedem Datenelement eine Sekunde lang inne, während der Verbraucher Datenelemente aus der Warteschlange entfernt und verarbeitet und nach der Entnahme jedes Datenelements eine Pause von 2 Sekunden einlegt. Nachdem der Verbraucher jedes Datenelement verarbeitet hat, verwenden Sie q.task_done()die Methode, um die Warteschlange zu benachrichtigen, damit die Warteschlange weiß, dass ein Datenelement verarbeitet wurde.

import queue
import threading
import time


def producer(q):
    for i in range(10):
        q.put(i)
        print("[Producer] Put item {} into queue".format(i))
        time.sleep(1)


def consumer(q):
    while True:
        item = q.get()
        print("[Consumer] Get item {} from queue".format(item))
        q.task_done()
        print(f'task {
      
      threading.current_thread().name} done! item-->:{
      
      item}')
        time.sleep(2)


if __name__ == '__main__':
    q = queue.Queue()
    t1 = threading.Thread(target=producer, args=(q,))
    t2 = threading.Thread(target=consumer, args=(q,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()

Laufergebnisse:
Fügen Sie hier eine Bildbeschreibung ein
Der Code hier verwendet Threads, um Produzenten und Konsumenten zu simulieren, und Produzenten und Konsumenten stellen gleichzeitig Daten ein und nehmen Daten auf, sodass Sie sehen können, dass die Produktion und der Konsum von Daten abwechselnd durchgeführt werden.

Für die spezifische Verwendung sind unterschiedliche Geschäftsszenarien erforderlich, um die Verwendungsmethode auszuwählen.

Das Obige ist eine Einführung in die grundlegende Verwendung von Python – queue [queue] task_done() und join(). Vielen Dank fürs Lesen, ich hoffe, es wird Ihnen hilfreich sein!

Supongo que te gusta

Origin blog.csdn.net/qq_43030934/article/details/132755839
Recomendado
Clasificación