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...