1. 程式人生 > >python中程序間通訊

python中程序間通訊

程序間通訊:
    磁碟互動
        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  存入到共享記憶體中的資料
                  是一個列表,要求列表中數型別一致
                  正整數,則表示開闢一個多大的序列空間
        返回值:返回一個共享記憶體物件