日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python (高级消息队列)普通、进程、进程池的消息队列

發布時間:2025/3/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python (高级消息队列)普通、进程、进程池的消息队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、普通消息隊列

from queue import Queue?
這個是普通的隊列模式,類似于普通列表,先進先出模式,get方法會阻塞請求,直到有數據get出來為止。

import Queueq = Queue.Queue()for i in range(5):q.put(i)while not q.empty():print q.get()輸出: 0 1 2 3 4

二、多進程消息隊列

from multiprocessing.Queue import Queue(各子進程共有)
這個是多進程并發的Queue隊列,用于解決多進程間的通信問題。普通Queue實現不了。例如來跑多進程對一批IP列表進行運算,運算后的結果都存到Queue隊列里面,這個就必須使用multiprocessing提供的Queue來實現。

創建

import multiprocessing queue = multiprocessing.Queue(隊列長度)

?

因為進程間不共享全局變量,所以使用Queue進行數據通信,可以在父進程中創建兩個字進程,一個往Queue里寫數據,一個從Queue里取出數據。?

import multiprocessing import timedef write_queue(queue):# 循環寫入數據for i in range(10):if queue.full():print("隊列已滿!")break# 向隊列中放入消息queue.put(i)print(i)time.sleep(0.5)def read_queue(queue):# 循環讀取隊列消息while True:# 隊列為空,停止讀取if queue.empty():print("---隊列已空---")break# 讀取消息并輸出result = queue.get()print(result)if __name__ == '__main__':# 創建消息隊列queue = multiprocessing.Queue(3)# 創建子進程p1 = multiprocessing.Process(target=write_queue, args=(queue,))p1.start()# 等待p1寫數據進程執行結束后,再往下執行p1.join()p1 = multiprocessing.Process(target=read_queue, args=(queue,))p1.start()

三、進程池消息隊列

? ? ? ? 初始化Pool時,可以指定一個最大進程數,當有新的請求提交到Pool中時,如果池還沒有滿,那么就會創建一個新的進程用來執行該請求;但如果池中的進程數已經達到指定的最大值,那么該請求就會等待,直到池中有進程結束,才會用之前的進程來執行新的任務。?

創建

import multiprocessing pool = multiprocessing.Pool(最大進程數)

?

進程池內通信?
創建進程池內Queue消息隊列通信?
import multiprocessing?
Queue:queue = multiprocessing.Manager().Queue()?
例:?
import multiprocessing?
import time

事例:

def write_data(queue):?# for循環 向消息隊列中寫入值?for i in range(5):?# 添加消息?queue.put(i)?print(i)?time.sleep(0.2)?print(“隊列已滿~”)def read_data(queue):# 循環讀取數據while True:# 判斷隊列是否為空if queue.qsize() == 0:print("隊列為空~")break# 從隊列中讀取數據result = queue.get()print(result)if __name__ == '__main__':# 創建進程池pool = multiprocessing.Pool(2)# 創建進程池隊列queue = multiprocessing.Manager().Queue()# 在進程池中的進程間進行通信# 使用線程池同步的方式,先寫后讀# pool.apply(write_data, (queue, ))# pool.apply(read_data, (queue, ))# apply_async() 返回ApplyResult 對象result = pool.apply_async(write_data, (queue, ))# ApplyResult對象的wait() 方法,表示后續進程必須等待當前進程執行完再繼續result.wait()pool.apply_async(read_data, (queue, ))pool.close()# 異步后,主線程不再等待子進程執行結束,再結束# join() 后,表示主線程會等待子進程執行結束后,再結束pool.join()

?

?

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的python (高级消息队列)普通、进程、进程池的消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。