Maison > Article > développement back-end > Analyse complète du principe de la file d'attente prioritaire des threads Python (file d'attente)
Le module Queue de Python fournit des classes de files d'attente synchrones et sécurisées pour les threads, notamment la file d'attente FIFO (premier entré, premier sorti), la file d'attente LIFO (dernier entré, premier sorti) LifoQueue et la file d'attente prioritaire PriorityQueue . Ces files d'attente implémentent des primitives de verrouillage et peuvent être utilisées directement en multi-threads. Les files d'attente peuvent être utilisées pour réaliser la synchronisation entre les threads.
Méthodes courantes dans le module Queue :
1.Queue.qsize() Renvoie la taille de la file d'attente
2.Queue.empty() Si la file d'attente est vide , renvoie True , Sinon False
3.Queue.full() Si la file d'attente est pleine, renvoie True, sinon False
4.Queue.full correspond à la taille maxsize
5.Queue .get([block[, timeout]]) obtient la file d'attente, délai d'attente
6.Queue.get_nowait() est équivalent à Queue.get(False)
7.Queue.put(item ) Écrivez dans la file d'attente, délai d'attente
8.Queue.put_nowait(item) est équivalent à Queue.put(item, False)
9. Queue.task_done() après avoir terminé un travail, la fonction Queue.task_done() envoie un signal à la file d'attente où la tâche a été terminée
10.Queue.join() signifie en fait attendre que la file d'attente soit vide avant d'effectuer d'autres opérations
#!/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"
Résultats de l'exécution du programme ci-dessus :
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!