網絡編程2
在內存中開辟一個管道空間,對多個進程可見。在通信形式上形成一種約束。
linux 文件類型
b c d - l s p
目錄 普通文件 鏈接 套接字 管道
multiprocessing ---》 Pipe 函數
Pipe(duplex)
功能 : 創建一個管道
參數 : duplex 默認為 True 表示管道為雙向管道
如果設置為False 則表示管道為單向管道
返回值 : 返回兩個管道流對象,分別表示管道的兩端
如果參數為True(默認) 兩個對象均可發送接受 如果為False時 則第一個對象只能接受,第二個對象只能發送
- 向管道發送數據使用send()函數,從管道接受數據使用recv()函數
- recv()函數為阻塞函數,當管道中數據為空的時候會阻塞
- 一次recv() 只能接受一次send()的內容
- send()可以發送字符串數字列表等多種類型數據
消息隊列
multiprocessing --- > Queue
在內存中開辟一個隊列模型,用來存放消息。任何擁有隊列對象的進程都可以進行消息的存放和取出
Queue(maxsize = 0)
功能 : 創建一個消息隊列對象
參數 : maxsize 默認為0 表示消息隊列可以存放的消息有 系統自動分配的空間而定
0 正整數 表示隊列中最多存放多少條消息
返回值 : 消息隊列對象
q.put()
向消息隊列中存放一條消息,當消息隊列滿的時候,會阻塞
存放的消息類型可以使數字列表,字串等
q.full()
判斷隊列是否為滿,如果滿則返回True 否則返回False
q.qsize()
查看當前隊列中消息數量
q.get()
獲取消息,每次獲取一條,當消息隊列為空是,則阻塞
q.empty()
消息隊列為空則返回True 不為空返回False
- put get 中block參數和timeout參數
block 默認為True 表示兩個函數都是阻塞函數
如果設置為False則表示不阻塞
timeout 當block設置為True的時候表示超時等待時間
共享內存
在內存中開辟一段內存空間存儲數據,每次存儲的內容會覆蓋上次的內容。由於沒有對內存進行格式化的修飾所以存取速度塊效率高
from multiprocessing import Value,Array
obj = Value(ctype,obj)
功能 : 開辟共享內存
參數 : ctype 要轉變的c的類型
obj 要寫入共享內存的初始值
obj.value 屬性為獲取共享內存中的值
obj = Array(ctype,obj)
功能 : 開辟一個共享內存空間
參數 : 要轉換的c的類型
obj : 放入共享內存中的數據,是一個列表,要求列 表中的數據為相同類型數據
如果obj傳入一個正數,則表示在共享內存中開辟一個 多大的空間,空間中可以存放的數值類型 由ctype確定
返回值:返回一個可叠代對象通過for循環取值,可以進行修改
管道 消息隊列 共享內存
開辟空間 內存中 內存中 內存中
讀寫方式 可雙向/單項 先進顯出 操作內存
按照個數存儲
效率 一般 一般 較快
是否需要 不需要 不需要 需要
同步互斥
信號 :
kill -l 查看系統信號
kill -signame PID 給進程號PID的進程發送signame信號
信號 : 信號名稱 含義 默認處理方法
名稱 : 系統定義
含義 : 系統定義
處理方式 : 采用默認方式處理 (系統定義 終止 暫停 忽略
忽略信號(當信號沒發生過)
采用自定義的方式處理
如何發送信號:
os.kill(pid,sig)
功能 : 向一個進程發送一個信號
參數 : pid :要發送進程的PID號
sig :要發送的信號
signal.alarm(sec)
功能:給自己發送一個時鐘信號 (SIGALRM)
參數: sec : 秒數 表示在相應的秒數後發送時鐘信號
- 信號是一種異步的進程間通信方式
- alarm 函數在一個進程中如果使用多次,則後面的時鐘時間會覆蓋前面的時間
信號的處理:
signal.pause()
阻塞等待一個信號的發生
signal.signal(signum,handler)
功能 : 處理信號
參數 : signum : 表示可以處理的信號
handler : 信號的處理方法
默認處理方式 : SIG_DFL
忽略信號 : SIG_IGN
自定義的方式 : function
- signal函數也是一個異步處理信號函數
- SIGSTOP 和 SIGKILL不能被signal函數處理
僵屍進程的信號處理方案 父進程中
signal(SIGCHLD,SIG_IGN)
同步和互斥
臨界資源 : 對多個進程或者線程都可見的資源,容易產生爭奪,我們將這類資源稱為臨界資源
臨界區 : 對臨界資源進行操作的代碼區域稱之為臨界區
解決資源爭奪: 同步 或者 互斥
同步 : 同步是一種合作關系,為完成某種任務而建立的多個進程或者線程之間的協調調用,次序等待,傳遞消息告知資源占用情況
互斥 : 互斥是一種制約關系,當一個進程或者線程進入到臨界區後會進行枷鎖操作,此時其他進程(線程)無法進如臨界區,只有當該進程(線程)使用後進行解鎖,其他人才可以使用。這種技術往往是通過阻塞完成
網絡編程2