python 多程序 高階 程序間通訊之Queue

2021-09-26 08:54:04 字數 2349 閱讀 2606

假如建立了大量的程序,那程序間通訊是必不可少的。python提供了多種程序間通訊的方式,如:queue和pipe方法。他們兩者的區別在於pipe常用來在兩個程序間通訊,queue用來在多個程序間實現通訊;

queue是多程序安全的佇列,可以使用queue實現多程序之間的資料傳遞。有兩個方法:put 和 get 可以進行 queue 操作:

put 方法用以插入資料到佇列中,他還有兩個可選引數:blocked 和 timeout。如果blocked 為 true(預設值),並且timeout為正值,該方法會阻塞timeout指定的時間,直到該佇列有剩餘的空間。如果超時,會丟擲 queue.full異常。如果blocked為false,但該queue佇列已滿,會立即丟擲queue.full異常。

get 方法可以用佇列讀取並且刪除乙個元素。同樣,get方法有兩個可選引數:blocked和timeout。如果blocked為true(預設值),並且timeout為正值,那麼在等待時間內沒有取到任何元素,會丟擲queue.empty異常。如果blocked為false,分兩種情況:如果queue有乙個值可用,則立即放回該值;否則,如果隊列為空,則立即丟擲queue.empty異常。

示例:在父程序中建立三個子程序,兩個子程序往queue中寫入資料,乙個子程序從queue中讀取資料。

# -*- coding: utf-8 -*-

# user: jier

from multiprocessing import process, queue

import os, time, random

# 寫資料程序執行的**

def proce_write(q, urls):

print("process (%s) is writing..." % os.getpid())

for url in urls:

q.put(url)

print("put %s to queue..." % url)

time.sleep(random.random())

# 讀資料程序執行的**

def proc_read(q):

print('process (%s) is writing...' %os.getpid())

while true:

url = q.get(true)

print('get %s from queue.' % url)

if __name__ == "__main__":

# 父程序建立queue,並傳給各個子程序

q=queue()

proc_writer1 = process(target=proce_write, args=(q, ['url_1', 'url_2', 'url_3']))

proc_writer2 = process(target=proce_write, args=(q, ['url_4', 'url_5', 'url_6']))

proc_reader = process(target=proc_read, args=(q,))

# 啟動子程序 proc_write,寫入

proc_writer1.start()

proc_writer2.start()

# 啟動子程序proc_reader,讀取

proc_reader.start()

# 等待proc_writer結束

proc_writer1.join()

proc_writer2.join()

# proc_reader程序是死迴圈,無法等待其結束,只能強行終止,下面是強行終止的方法:

proc_reader.terminate()

輸出:

process (12204) is writing...

put url_1 to queue...

process (12724) is writing...

put url_4 to queue...

process (5484) is writing...

get url_1 from queue.

get url_4 from queue.

put url_2 to queue...

get url_2 from queue.

put url_3 to queue...

get url_3 from queue.

put url_5 to queue...

get url_5 from queue.

put url_6 to queue...

get url_6 from queue.

process finished with exit code 0

Python多程序 程序間通訊

1.使用multiprocessing模組建立的程序之間的通訊 coding utf 8 queue類常用屬性和方法 init self,maxsize 1 qsize full empty put obj,block true,timeout none put nowait obj get blo...

Python 多程序程序池Queue程序通訊

from multiprocessing import pool,manager import time defhanshu queue,a n 1 while n 50 print r正在工作 d a,end n 1 步驟3 往佇列中傳送一條訊息 queue.put a time.sleep 2 ...

Python高階 多程序

在 python高階教程m10 多執行緒 和 python高階教程m10b 多執行緒通訊 我們介紹了多執行緒程式設計,並行程式設計模式中還有一種多程序程式設計模式,這篇文章將介紹到多程序程式設計。多程序需要用到multiprocessing模組,多程序程式設計模型可以參考多執行緒模型。通過乙個例子我...