Heim > Artikel > Backend-Entwicklung > Umfassende Analyse des Prinzips der Python-Thread-Prioritätswarteschlange (Warteschlange)
Pythons Queue-Modul bietet synchrone, threadsichere Warteschlangenklassen, einschließlich FIFO-Warteschlange (First In First Out), LIFO-Warteschlange LifoQueue (Last In First Out) und Prioritätswarteschlange PriorityQueue. Diese Warteschlangen implementieren Sperrprimitive und können direkt in Multithreads verwendet werden. Warteschlangen können verwendet werden, um eine Synchronisierung zwischen Threads zu erreichen.
Gemeinsame Methoden im Queue-Modul:
1.Queue.qsize() Gibt die Größe der Warteschlange zurück
2.Queue.empty() Wenn die Warteschlange leer ist , gibt True zurück, andernfalls False
3.Queue.full() Wenn die Warteschlange voll ist, wird True zurückgegeben, andernfalls False
4.Queue.full entspricht der maximalen Größe
5.Queue .get([block[, timeout]]) ruft die Warteschlange ab, Timeout-Wartezeit
6.Queue.get_nowait() entspricht Queue.get(False)
7.Queue.put(item) In die Warteschlange schreiben, Timeout-Wartezeit
8.Queue.put_nowait(item) entspricht Queue.put(item, False)
9. Queue.task_done() Nach Abschluss eines Auftrags sendet die Funktion Queue.task_done() ein Signal an die Warteschlange, in der die Aufgabe abgeschlossen wurde
10.Queue.join() bedeutet eigentlich Warten, bis die Warteschlange leer ist bevor Sie andere Vorgänge ausführen
#!/usr/bin/python # -*- coding: UTF-8 -*- import Queue import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, q): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.q = q def run(self): print "Starting " + self.name process_data(self.name, self.q) print "Exiting " + self.name def process_data(threadName, q): while not exitFlag: queueLock.acquire() if not workQueue.empty(): data = q.get() queueLock.release() print "%s processing %s" % (threadName, data) else:queueLock.release() time.sleep(1) threadList = ["Thread-1", "Thread-2", "Thread-3"] nameList = ["One", "Two", "Three", "Four", "Five"] queueLock = threading.Lock() workQueue = Queue.Queue(10) threads = [] threadID = 1 # 创建新线程 for tName in threadList: thread = myThread(threadID, tName, workQueue) thread.start() threads.append(thread) threadID += 1 # 填充队列 queueLock.acquire() for word in nameList: workQueue.put(word) queueLock.release() # 等待队列清空 while not workQueue.empty(): pass # 通知线程是时候退出 exitFlag = 1 # 等待所有线程完成 for t in threads: t.join() print "Exiting Main Thread"
Das Ausführungsergebnis des obigen Programms:
Starting Thread-1 Starting Thread-2 Starting Thread-3 Thread-1 processing One Thread-2 processing Two Thread-3 processing Three Thread-1 processing Four Thread-2 processing Five Exiting Thread-3 Exiting Thread-1 Exiting Thread-2 Exiting Main Thread
Das obige ist der detaillierte Inhalt vonUmfassende Analyse des Prinzips der Python-Thread-Prioritätswarteschlange (Warteschlange). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!