python中程序間通訊

2021-08-20 08:40:21 字數 1791 閱讀 9083

程序間通訊:

磁碟互動

1,速度慢

2,不安全

socket  本地套接字

管道 訊息列隊 共享記憶體 訊號 訊號量  套接字

管道通訊 pipe

在記憶體中開闢一塊空間,對多個程序可見,通過管道

,多個程序進行通訊

multiprocessing --> pipe

fd1,fd2 = pipe(duplex = true)

功能 : 建立乙個管道

引數 : duplex預設為true  表示雙向管道

設定為false則表示單向管道

返回值:返回兩個管道流物件,表示管道的兩端

如果是雙向管道則兩個均可讀寫

如果為單向管道,則fd1只能讀,fd2只能寫

接收訊息: fd1.recv()

傳送訊息:  fd2.send()

fd1.recv()

功能:接收訊息(沒次接收一條)

引數「無

返回值:接受到訊息

*如果管道沒有訊息會阻塞

fd2.send():

功能:訊息傳送,可以是字串或其他型別

引數:    要傳送的內容

*如果沒有接收端則管道破裂

訊息佇列:

佇列:先進先出

在記憶體中開闢佇列迷行,用來存放訊息,

任何擁有佇列的程序都可以訪問訊息

佇列的建立:

q = queue(maxsize = 0)

功能:建立乙個訊息佇列

引數:maxsize預設為0便是佇列可存放訊息由記憶體而定

> 0 表示對列最多存放多少條訊息

返回值:返回訊息佇列物件

q.put()

功能:向佇列中存放訊息(字串 整數 列表)

引數:要存的訊息

*當佇列滿時會阻塞

q.full()

判斷佇列是否為滿 滿返回true

q.get()

功能:向佇列中取出訊息

返回值:取出的訊息

*當佇列空時會阻塞

q.empty()

判斷佇列是否為空,空返回true

q.qsize()

得到當前佇列中訊息的個數

q.close() 關閉佇列

*put get中均有可選引數 block 和timeout

block預設為true 表示阻塞函式 如果設定為false則不阻塞

timeout  block 為true時,設定超時時間

共享記憶體:

在記憶體中開闢一段空間,儲存資料 對多個程序可見

每次寫入共享記憶體的資料會覆蓋之前的內容 由於對

記憶體格式化較少所以訪問速度快

from multiprocessing import value,array

obj = value(ctype,obj)

功能:開闢共享記憶體空間

引數:ctype str 要轉變的c型別(對照ctype表)

obj 寫入共享記憶體的初始值

返回值: 返回乙個共享記憶體的物件

obj.value   即可得到共享記憶體車內的值

obj = array(ctype,obj)

功能:開闢共享記憶體空間

引數:ctype 要轉換的型別

obj  存入到共享記憶體中的資料

是乙個列表,要求列表中數型別一致

正整數,則表示開闢乙個多大的序列空間

返回值:返回乙個共享記憶體物件

Python 程序池中程序間通訊

問題描述 最近遇到這樣乙個問題,要求使用 python3 開闢乙個程序池,裡面放乙個生產者程序,然後其他的都是消費者程序,程序間用 queue 進行通訊。問題分析 問題很好解決,但是要注意一點,就是在使用 python 的程序池 pool 時,queue 可能會出錯,需要使用 manager que...

vc 中程序間的通訊

vc 中程序間的通訊 2006 11 23 10 44 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自己的虛擬位址空間,當程序...

vc 中程序間的通訊

程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自己的虛擬位址空間,當...