訊息佇列二

2021-08-13 18:27:42 字數 2654 閱讀 4553

# queue只有maxsize乙個構造引數,用來指定佇列容量,指定為0的時候代表容量無限。

# 主要有以下成員函式:

# queue.qsize():返回訊息佇列的當前空間。返回的值不一定可靠

# queue.empty():判斷訊息佇列是否為空,返回true或false。同樣不可靠

# queue.full():類似上邊,判斷訊息佇列是否滿

# queue.put(item, block=true, timeout=none):往訊息佇列中存放訊息。block可以控制是否阻塞,timeout指定阻塞時候的等待時間。如果不阻塞或者超時,會引起乙個full exception。

# queue.put_nowait(item):相當於put(item, false)

# queue.get(block=true, timeout=none):獲取乙個訊息,其他同put

# 以下兩個函式用來判斷訊息對應的任務是否完成:

# queue.task_done():接受訊息的執行緒通過呼叫這個函式來說明訊息對應的任務已完成

# queue.join(): 實際上意味著等到隊列為空,再執行別的操作

'''寫乙個消費者和生產者,為了練習多執行緒,我們使用多執行緒的方式來實現,並通過類的重寫的方法來實現'''

from threading import thread

#from multiprocessing import queue

import time

from queue import queue

class proceduer(thread):

def

__init__(self

,queue):

super(proceduer,

self).__init__()

self.queue = queue

def

run(self):

try:

for i in

xrange(1

,10):

print("put data is : to queue".format(i))

self.queue.put(i)

except

exception

as e:

print("put data error!")

raise e

class consumer_odd(thread):

def

__init__(self

,queue):

super(consumer_odd,

self).__init__()

self.queue = queue

def

run(self):

try:

while not

self.queue.empty:

number = self.queue.get(block=true

,timeout=3)

if number % 2 != 0:

print("get from queue odd ".format(number))

else:

self.queue.put(number)

time.sleep(1)

except

exception

as e:

raise e

class consumer_even(thread):

def

__init__(self

,queue):

super(consumer_even,

self).__init__()

self.queue = queue

def

run(self):

try:

while not

self.queue.empty:

number = self.queue.get(block=true

,timeout=3)

if number % 2 == 0:

print("get from queue enev.thread name is ".format(number,

self.getname()))

else:

self.queue.put(number)

time.sleep(1)

except

exception

as e:

raise e

def

main():

queue = queue()

p = proceduer(queue=queue)

p.start()

p.join()

time.sleep(1)

c1 = consumer_odd(queue=queue)

c2 = consumer_even(queue=queue)

c1.start()

c2.start()

c1.join()

c2.join()

print("all threads terminate!")

if __name__ == "__main__":

main()

system v 訊息佇列(二)

1 功能 把一條訊息新增到訊息佇列中 2 原型 intmsgsnd int msqid,const void msgp.size t msgsz,int msg 3 引數 msgqid 由msgget函式返回的訊息佇列標識碼 msgp 是乙個指標,指標指向準備傳送的訊息 msgsz 是msgp指向的...

訊息佇列學習二

感覺有必要補充一篇訊息佇列技術的基本概念,無論rabbitmq activemq還是其他,都有的一些基本概念 術語 機制,分享給大家,希望大家在搞訊息佇列技術的時候能夠快速 理解 排上用場。1.訊息生產者 訊息者 佇列 主題 訊息生產者producer 傳送訊息到訊息佇列。訊息消費者consumer...

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...