程序間通訊:
磁碟互動
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模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自己的虛擬位址空間,當...