python多程序通訊

2021-08-17 20:49:45 字數 2721 閱讀 9372

這是看書筆記

python提供了多種程序通訊的方式,比如說queue,pipe,value+array等。

其中queue主要用來在多個程序之間實現通訊。pipe常用來在兩個程序之間實現通訊。

queue是多程序安全佇列,queue通過put和get方法來實現多程序之間的資料傳遞。

put方法用於將資料插入到佇列,有兩個可選引數,乙個是blocked,乙個時timeout,

如果blocked為true,那麼這個方法就會阻塞timeout指定的時間,直到佇列有剩餘的

空間。如果超時,則丟擲queue.full異常。

get方法用於將資料從佇列中取出,也有兩個可選引數,blocked和timeout,如果blocked

為true,那麼這個方法會阻塞timeout指定的時間,直到佇列中有資料。如果超時,則丟擲

queue.empty異常。

import os,time,random

from multiprocessing import process,queue

def write_proc(q,urls):

print("process %s running..."%(os.getpid()))

for url in urls:

q.put(url)

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

time.sleep(random.random()*3)

def read_proc(q):

print("process %s running..."%(os.getpid()))

while true:

url=q.get(true)

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

if __name__=='__main__':

print("main process %s running..."%(os.getpid()))

q=queue()

writer_proc1=process(target=write_proc,args=(q,['url1','url2','url3','url4']))

writer_proc2=process(target=write_proc,args=(q,['url5','url6','url7','url8']))

reader_proc=process(target=read_proc,args=(q,))

writer_proc1.start()

writer_proc2.start()

reader_proc.start()

writer_proc1.join()

writer_proc2.join()

#在這裡由於reader_proc執行函式時乙個死迴圈,所以只能通過手動終結程序

這個queue應該內部實現了一些互斥操作,使得多個程序能對其訪問。

pipe常用來在兩個程序之間進行通訊。該方法返回乙個二元元組 (conn1,conn2),代表乙個管道的兩端。pipe方法有個duplex引數。預設為true,當其為true時,表示該管道處於全雙工模式下。conn1和conn2都可以進行收發。當期為false時,表示該管道處於半雙工模式下,conn只能進行接收訊息,conn2只能傳送訊息。

send和recv方法分別是傳送和接收訊息的方法。

為了讓p2能夠一直接收從管道傳過來的資料,在接收資料時,將過程放在乙個迴圈中,監聽pipe,所以

最後p2的終結只能通過terminate來強制終結,如果使用join方法,那麼主程序會一直阻塞。

python多程序通訊

python 多程序實現 from multiprocessing import import time import os class clockprocess process def init self,interval self.interval interval process.init s...

Python 多程序 通訊

1.多程序佇列 只能實現資料互動,不能共享 from multiprocessing import process,queue import time import uuid class myprocess process def init self,q super myprocess,self i...

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...