Heim  >  Artikel  >  Backend-Entwicklung  >  Umfassende Analyse des Prinzips der Python-Thread-Prioritätswarteschlange (Warteschlange)

Umfassende Analyse des Prinzips der Python-Thread-Prioritätswarteschlange (Warteschlange)

Tomorin
TomorinOriginal
2018-08-16 17:38:243103Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn