python Queue實現執行緒間通訊

2021-09-01 22:58:50 字數 1539 閱讀 8485

python中queue是訊息佇列,提供執行緒間通訊機制,python3中重名為為queue

queue模組中的類:

queue(maxsize=0):建立乙個fifo佇列,若給定最大值,佇列沒有空間時阻塞,否則是無限佇列

lifoqueue(maxsize=0):建立乙個棧,maxsize含義同上

priorityqueue(maxsize=0):建立乙個優先佇列,maxsize含義同上

queue模組異常:

empty:對空佇列呼叫get*()方法時丟擲異常

full:對滿佇列呼叫put*()方法時丟擲異常

queue物件方法:

qsize():返回佇列大小,是近似值(返回時可能佇列大小被修改了)

empty():判斷佇列是否為空

full():判斷佇列是否為滿

put(item, block=true, timeout=none):將item加入佇列,可選阻塞和阻塞時間

put_nowait(item):即put(item, false)

get(block=true, timeout=none):從佇列中獲取元素,可選阻塞和阻塞時間

get_nowait():即get(false)

task_done():用於表示佇列中某個元素已經執行完成,會被join()呼叫

join():佇列中所有元素執行完畢並呼叫task_done()訊號之前,保持阻塞

乙個使用queue通訊的例子:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import thread

from time import sleep

import threading

from random import randrange

from atexit import register

from queue import queue

def writeq(queue):

for i in range(100):

tmp = queue.get(true)

queue.put(tmp + 1, true)

def readq(queue):

for i in range(100):

tmp = queue.get(true)

queue.put(tmp + 1, true)

def main():

q = queue(32)

q.put(0, true)

threading.thread(target=writeq, args = (q,)).start()

threading.thread(target=readq, args = (q,)).start()

sleep(2)

print q.get(true)

if __name__ == '__main__':

main()

可以得出結論,queue模組內部有同步機制,因此呼叫queue的應用模組不需要擔心併發的問題

簡短而有效的python queue佇列解釋

queue.qsize 返回佇列的大小 queue.empty 如果隊列為空,返回true,反之false queue.full 如果佇列滿了,返回true,反之false queue.full 與 maxsize 大小對應 queue.get block timeout 獲取佇列,timeout等...

簡短而有效的python queue佇列解釋

queue.qsize 返回佇列的大小 queue.empty 如果隊列為空,返回true,反之false queue.full 如果佇列滿了,返回true,反之false queue.full 與 maxsize 大小對應 queue.get block timeout 獲取佇列,timeout等...

python queue 多生產者,多消費者

專案需求是從快 爬取ip,運用到專案中,設定佇列的大小,當有ip被消耗時,就新增新的ip到佇列中,獲取ip的頁面是不斷重新整理的。總的來說,就是一方不斷把爬取ip存到佇列中,一方不斷從佇列中取ip,消耗ip,此處爬取的是快 首先建立乙個佇列 from queue import queue q que...