Pour ceux qui sont exposés au langage de programmation Python pour la première fois, ils connaissent peu les threads Python lorsqu'ils ont commencé à apprendre la programmation Python. Dans cet article, nous en apprendrons davantage sur Python
Le module Queue de Python fournit des classes de file d'attente synchrones et sécurisées pour les threads, y compris la file d'attente FIFO (premier entré, premier sorti), LIFO ( dernier entré, premier sorti), la file d'attente 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 et la taille maxsize correspondent à
5.Queue.get([block[, timeout]]) pour obtenir la file d'attente, délai d'attente
6.Queue.get_nowait() est équivalent à Queue.get(False)
7.Queue.put(item) écrit 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, puis effectuer d'autres opérations
Par exemple :Le résultat de sortie de l'exemple ci-dessus est la suivante :
# !/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"
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
. les informations pour comprendre le contenu ci-dessus. J'espère que ce que j'ai décrit dans cet article vous sera utile et vous facilitera l'apprentissage de Python. Pour plus de connaissances connexes, veuillez visiter la colonne
Tutoriel PythonCe 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!