程序之間使用佇列Queue 通訊

2021-08-19 07:41:57 字數 1385 閱讀 2603

多程序之間通訊可以使用multiprocessing中的queue()來完成,下面簡單介紹一下queue()裡面的函式及功能

初始化queue()物件時(例如:q=queue()),若括號中沒有指定最大可接收的訊息數量,或數量為負值,那麼就代表可接受的訊息數量沒有上限(直到記憶體的盡頭);

1)如果block使用預設值,且沒有設定timeout(單位秒),訊息列隊如果為空,此時程式將被阻塞(停在讀取狀態),直到從訊息列隊讀到訊息為止,如果設定了timeout,則會等待timeout秒,若還沒讀取到任何訊息,則丟擲"queue.empty"異常;

2)如果block值為false,訊息列隊如果為空,則會立刻丟擲"queue.empty"異常;

1)如果block使用預設值,且沒有設定timeout(單位秒),訊息列隊如果已經沒有空間可寫入,此時程式將被阻塞(停在寫入狀態),直到從訊息列隊騰出空間為止,如果設定了timeout,則會等待timeout秒,若還沒空間,則丟擲"queue.full"異常;

2)如果block值為false,訊息列隊如果沒有空間可寫入,則會立刻丟擲"queue.full"異常;

下面請看乙個簡單的例子:

其中程序p_get執行函式get_data從佇列q中獲取資料,程序p_put執行函式put_data向佇列q寫入資料.

from multiprocessing import queue, process

import time

def get_data(q):

"""從佇列q裡面獲取資料"""

while true:

if q.qsize:

print('取出%s' % q.get())

time.sleep(0.6)

def put_data(q):

"""往佇列q裡面新增資料"""

count = 0

while true:

count += 1

if q.qsize() < 100:

q.put("第%s個資料" % count)

print("放入第%s個資料" % count)

time.sleep(0.5)

def main():

q = queue()

p_get = process(target=get_data, args=(q,))

p_get.start()

p_put = process(target=put_data, args=(q,))

p_put.start()

p_put.join()

p_get.join()

if __name__ == '__main__':

main()

程序之間通訊

之所以開啟子程序 肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。然而程序記憶體是物理隔離的 1.將共享資料放在檔案中,就是慢 2.管道subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你分配,速度快 from multiprocessi...

程序間的通訊 佇列Queue

1.佇列1 程序間通訊 ipc inter process communication 程序之間通訊用的佇列 queue 不是之前說的普通佇列 import queue 概念介紹 建立共享的程序佇列,queue是多程序安全的佇列,可以使用queue實現多程序之間的資料傳遞 queue maxsize...

WPF程序之間通訊

準備 使用copydata,wm user只能用於應用程式內部的通訊,跨程序用copydata public const int wm copydata 0x004a 查詢目標傳送窗體 dllimport user32.dll entrypoint findwindow public static ...