Python3 執行緒優先順序佇列( Queue)
Python 的 Queue 模組中提供了同步的、執行緒安全的佇列類,包括FIFO(先入先出)佇列Queue,LIFO(後入先出)佇列LifoQueue,和優先順序佇列 PriorityQueue。 |
這些佇列都實現了鎖原語,能夠在多執行緒中直接使用,可以使用佇列來實現執行緒間的同步。
Queue 模組中的常用方法:
Queue.qsize() 返回佇列的大小
Queue.empty() 如果佇列為空,返回True,反之False
Queue.full() 如果佇列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應
Queue.get([block[, timeout]])獲取佇列,timeout等待時間
Queue.get_nowait() 相當Queue.get(False)
Queue.put(item) 寫入佇列,timeout等待時間
Queue.put_nowait(item) 相當Queue.put(item, False)
Queue.task_done() 在完成一項工作之後,Queue.task_done()函式向任務已經完成的佇列傳送一個訊號
Queue.join() 實際上意味著等到佇列為空,再執行別的操作
例項:
#!/usr/bin/python3 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 ("開啟執行緒:" + self.name) process_data(self.name, self.q) print ("退出執行緒:" + 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 ("退出主執行緒")
以上程式執行結果:
開啟執行緒:Thread-1 開啟執行緒:Thread-2 開啟執行緒:Thread-3 Thread-3 processing One Thread-1 processing Two Thread-2 processing Three Thread-3 processing Four Thread-1 processing Five 退出執行緒:Thread-3 退出執行緒:Thread-2 退出執行緒:Thread-1 退出主執行緒
原文地址: https://www.linuxprobe.com/python3-thread-priority.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2670864/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 封裝優先順序佇列封裝佇列
- Java之執行緒的優先順序Java執行緒
- 多優先順序執行緒池實踐執行緒
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- 棧,佇列,優先順序佇列簡單介面使用佇列
- Java優先順序佇列DelayedWorkQueue原理分析Java佇列
- Python執行緒專題10:queue、多執行緒按順序執行Python執行緒
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- Facebook的分散式優先順序佇列FOQS分散式佇列
- 【java】【多執行緒】睡眠/守護/加入/禮讓執行緒,執行緒優先順序(4)Java執行緒
- 從Java到JVM到OS執行緒的優先順序JavaJVM執行緒
- C++ STL 優先佇列 (priority_queue)C++佇列
- Python 列表推導及優先順序佇列的實現Python佇列
- 個推基於 Apache Pulsar 的優先順序佇列方案Apache佇列
- RMQ——支援合併和優先順序的訊息佇列MQ佇列
- 基於EasyNetQ封裝RabbitMQ,優先順序郵件服務佇列封裝MQ佇列
- 原始碼解析C#中PriorityQueue(優先順序佇列)的實現原始碼C#佇列
- CSS優先順序CSS
- 佇列-順序儲存佇列
- python運算子及優先順序順序Python
- Android程式優先順序Android
- 中斷優先順序
- Yacc使用優先順序
- 主佇列&主執行緒佇列執行緒
- Nachos實驗實現執行緒id、限制執行緒數和更改排程演算法(按優先順序排程)執行緒演算法
- join、volatile、newSingleThreadLatch 實現執行緒順序執行thread執行緒
- Java中如何保證執行緒順序執行Java執行緒
- kafka多執行緒順序消費Kafka執行緒
- Linux執行時動態庫搜尋路徑優先順序Linux
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- PHP優先佇列PHP佇列
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 利用訊號量實現執行緒順序執行執行緒
- 運算子的優先順序
- SQL 優先順序join>whereSQL
- java運算子優先順序Java
- Android程式設計師會遇到的演算法(part 6 優先順序佇列PriorityQueue)Android程式設計師演算法佇列
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步