python中利用隊(duì)列asyncio.Queue進(jìn)行通訊詳解
前言
本文主要給大家介紹了關(guān)于python用隊(duì)列asyncio.Queue通訊的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
asyncio.Queue與其它隊(duì)列是一樣的,都是先進(jìn)先出,它是為協(xié)程定義的
例子如下:
import asyncio
async def consumer(n, q):
print('consumer {}: starting'.format(n))
while True:
print('consumer {}: waiting for item'.format(n))
item = await q.get()
print('consumer {}: has item {}'.format(n, item))
if item is None:
# None is the signal to stop.
q.task_done()
break
else:
await asyncio.sleep(0.01 * item)
q.task_done()
print('consumer {}: ending'.format(n))
async def producer(q, num_workers):
print('producer: starting')
# Add some numbers to the queue to simulate jobs
for i in range(num_workers * 3):
await q.put(i)
print('producer: added task {} to the queue'.format(i))
# Add None entries in the queue
# to signal the consumers to exit
print('producer: adding stop signals to the queue')
for i in range(num_workers):
await q.put(None)
print('producer: waiting for queue to empty')
await q.join()
print('producer: ending')
async def main(loop, num_consumers):
# Create the queue with a fixed size so the producer
# will block until the consumers pull some items out.
q = asyncio.Queue(maxsize=num_consumers)
# Scheduled the consumer tasks.
consumers = [
loop.create_task(consumer(i, q))
for i in range(num_consumers)
]
# Schedule the producer task.
prod = loop.create_task(producer(q, num_consumers))
# Wait for all of the coroutines to finish.
await asyncio.wait(consumers + [prod])
event_loop = asyncio.get_event_loop()
try:
event_loop.run_until_complete(main(event_loop, 2))
finally:
event_loop.close()
輸出如下:
consumer 0: starting consumer 0: waiting for item consumer 1: starting consumer 1: waiting for item producer: starting producer: added task 0 to the queue producer: added task 1 to the queue consumer 0: has item 0 consumer 1: has item 1 producer: added task 2 to the queue producer: added task 3 to the queue consumer 0: waiting for item consumer 0: has item 2 producer: added task 4 to the queue consumer 1: waiting for item consumer 1: has item 3 producer: added task 5 to the queue producer: adding stop signals to the queue consumer 0: waiting for item consumer 0: has item 4 consumer 1: waiting for item consumer 1: has item 5 producer: waiting for queue to empty consumer 0: waiting for item consumer 0: has item None consumer 0: ending consumer 1: waiting for item consumer 1: has item None consumer 1: ending producer: ending
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python編程語(yǔ)言的35個(gè)與眾不同之處(語(yǔ)言特征和使用技巧)
這篇文章主要介紹了Python編程語(yǔ)言的35個(gè)與眾不同之處,Python編程語(yǔ)言的語(yǔ)言特征和使用技巧,需要的朋友可以參考下2014-07-07
Python實(shí)現(xiàn)的json文件讀取及中文亂碼顯示問(wèn)題解決方法
這篇文章主要介紹了Python實(shí)現(xiàn)的json文件讀取及中文亂碼顯示問(wèn)題解決方法,涉及Python針對(duì)json文件的讀取載入、編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
Python中ModuleNotFoundError模塊未找到的解決方法
ModuleNotFoundError是常見的運(yùn)行時(shí)錯(cuò)誤,通常由模塊路徑配置、安裝缺失或命名沖突導(dǎo)致,本文主要介紹了Python中ModuleNotFoundError模塊未找到的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-06-06
python正則表達(dá)式函數(shù)match()和search()的區(qū)別
match()和search()都是python中的正則匹配函數(shù),那這兩個(gè)函數(shù)有何區(qū)別呢?本文詳細(xì)介紹了這2個(gè)函數(shù)的區(qū)別2021-10-10
python的簡(jiǎn)單web框架flask快速實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了python的簡(jiǎn)單web框架flask快速實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
DRF過(guò)濾排序分頁(yè)異常處理的過(guò)程記錄
在寫django drf的時(shí)候會(huì)遇到搜索,以及過(guò)濾的情況,這篇文章主要給大家介紹了關(guān)于DRF過(guò)濾排序分頁(yè)異常處理的相關(guān)資料,需要的朋友可以參考下2021-07-07
Python實(shí)現(xiàn)簡(jiǎn)易的圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)易的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

