主頁(yè) > 知識(shí)庫(kù) > Python多線程 Queue 模塊常見用法

Python多線程 Queue 模塊常見用法

熱門標(biāo)簽:外賣地址有什么地圖標(biāo)注 企業(yè)彩鈴地圖標(biāo)注 上海正規(guī)的外呼系統(tǒng)最新報(bào)價(jià) 長(zhǎng)春極信防封電銷卡批發(fā) 預(yù)覽式外呼系統(tǒng) 如何地圖標(biāo)注公司 銀川電話機(jī)器人電話 煙臺(tái)電話外呼營(yíng)銷系統(tǒng) 電銷機(jī)器人錄音要學(xué)習(xí)什么

queue介紹

queue是python中的標(biāo)準(zhǔn)庫(kù),俗稱隊(duì)列,可以直接import 引用,在python2.x中,模塊名為Queue
在python中,多個(gè)線程之間的數(shù)據(jù)是共享的,多個(gè)線程進(jìn)行數(shù)據(jù)交換的時(shí)候,不能夠保證數(shù)據(jù)的安全性和一致性,所以當(dāng)多個(gè)線程需要進(jìn)行數(shù)據(jù)交換的時(shí)候,隊(duì)列就出現(xiàn)了,隊(duì)列可以完美解決線程間的數(shù)據(jù)交換,保證線程間數(shù)據(jù)的安全性和一致性

Python 的 Queue 模塊中提供了同步的、線程安全的隊(duì)列類,包括FIFO(先入先出)隊(duì)列Queue,LIFO(后入先出)隊(duì)列LifoQueue,和優(yōu)先級(jí)隊(duì)列 PriorityQueue。

這些隊(duì)列都實(shí)現(xiàn)了鎖原語(yǔ),能夠在多線程中直接使用,可以使用隊(duì)列來(lái)實(shí)現(xiàn)線程間的同步。
Queue 模塊中的常用方法:

Queue.qsize() 返回隊(duì)列的大小
Queue.empty() 如果隊(duì)列為空,返回True,反之False
Queue.full() 如果隊(duì)列滿了,返回True,反之False
Queue.full 與 maxsize 大小對(duì)應(yīng)
Queue.get([block[, timeout]])獲取隊(duì)列,timeout等待時(shí)間
Queue.get_nowait() 相當(dāng)Queue.get(False)
Queue.put(item) 寫入隊(duì)列,timeout等待時(shí)間
Queue.put_nowait(item) 相當(dāng)Queue.put(item, False)
Queue.task_done() 在完成一項(xiàng)工作之后,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào)
Queue.join() 實(shí)際上意味著等到隊(duì)列為空,再執(zhí)行別的操作

import threading
import time

def a():
    print("a start\n")
    for i in range(10):
        time.sleep(0.1)
    print("a finish\n")
def b():
    print("b start\n")
    print("b finish\n")
def main():
    # t=threading.Thread(target=a,name="T")
    t = threading.Thread(target=a)
    t2=threading.Thread(target=b)
    t.start()
    t2.start()
    # t2.join()
    # t.join()
    print("all done\n")
if __name__ == '__main__':
    main()

Queue 模塊:

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

# 創(chuàng)建新線程
for tName in threadList:
    thread = myThread(threadID, tName, workQueue)
    thread.start()
    threads.append(thread)
    threadID += 1

# 填充隊(duì)列
queueLock.acquire()
for word in nameList:
    workQueue.put(word)
queueLock.release()

# 等待隊(duì)列清空
while not workQueue.empty():
    pass

# 通知線程是時(shí)候退出
exitFlag = 1

# 等待所有線程完成
for t in threads:
    t.join()
print ("退出主線程")

到此這篇關(guān)于Python多線程 Queue 模塊的文章就介紹到這了,更多相關(guān)Python Queue 模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python copy模塊中的函數(shù)實(shí)例用法
  • Python中os模塊的實(shí)例用法
  • Python協(xié)程asyncio模塊的演變及高級(jí)用法
  • python常見模塊與用法
  • Python寫腳本常用模塊OS基礎(chǔ)用法詳解
  • python 中os模塊os.path.exists()的用法說(shuō)明
  • python re模塊常見用法例舉
  • 詳解Python中openpyxl模塊基本用法
  • Python常用的模塊和簡(jiǎn)單用法

標(biāo)簽:珠海 宜昌 上饒 潮州 湖北 西寧 佳木斯 盤錦

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python多線程 Queue 模塊常見用法》,本文關(guān)鍵詞  Python,多,線程,Queue,模塊,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python多線程 Queue 模塊常見用法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python多線程 Queue 模塊常見用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章