假如建立了大量的程序,那程序間通訊是必不可少的。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模組,多程序程式設計模型可以參考多執行緒模型。通過乙個例子我...