詳解Python進程間通信之命名管道
管道是一種簡單的FIFO通信信道,它是單向通信的。 通常啟動進程創(chuàng)建一個管道,然后這個進程創(chuàng)建一個或者多個進程子進程接受管道信息,由于管道是單向通信,所以經(jīng)常需要創(chuàng)建兩個管道來實現(xiàn)雙向通信。
命名管道是對傳統(tǒng)管道的擴展,默認的管道是匿名管道,只在程序運行時存在;而命名管道是持久化的,當(dāng)不需要時需要刪除它。
命名管道使用文件系統(tǒng),由mkfifo()方法創(chuàng)建。一旦創(chuàng)建了,兩個獨立的進程都可以訪問它,一個讀,另外一個寫。
命名管道支持阻塞讀和阻塞寫操作: 如果一個進程打開文件讀,它會阻塞直到另外一個進程寫。 但是我們可以指定O_NONBLOCK選項來啟用非阻塞模式。
命名管道必須以只讀或者只寫的模式打開,它不能以讀+寫的模式打開,因為它時單向通信。如果要實現(xiàn)雙向通信,必須打開兩個命名管道。
下面是一個 Python 使用命名管道來實現(xiàn)進程間通信的例子
Server 端
import os, time read_path = "/tmp/pipe.in" write_path = "/tmp/pipe.out" if os.path.exists(read_path): os.remove(read_path) if os.path.exists(write_path): os.remove(write_path) os.mkfifo(write_path) os.mkfifo(read_path) rf = os.open(read_path, os.O_RDONLY) wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR) while True: s = os.read(rf, 1024) print "received msg: %s" % s if len(s) == 0: time.sleep(1) continue if "exit" in s: break os.write(wf, s) os.close(rf) os.close(wf)
Client 端
import os import time write_path = "/tmp/pipe.in" read_path = "/tmp/pipe.out" wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR) rf = None for i in range(1, 11): msg = "msg " + str(i) len_send = os.write(wf, msg) print "sent msg: %s" % msg if rf is None: rf = os.open(read_path, os.O_RDONLY) s = os.read(rf, 1024) if len(s) == 0: break print "received msg: %s" % s time.sleep(1) os.write(wf, 'exit') os.close(rf) os.close(wf)
測試
- 首先運行server.py
- 然后運行client.py
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python?AutoViz庫一行代碼實現(xiàn)可視化數(shù)據(jù)集
這篇文章主要介紹了python?AutoViz庫一行代碼實現(xiàn)可視化數(shù)據(jù)集實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01Python NumPy數(shù)組利器之np.zeros函數(shù)詳解與應(yīng)用實例
在Python的科學(xué)計算庫NumPy中,numpy.zeros()是一個非常重要的函數(shù),它用于創(chuàng)建一個指定形狀和數(shù)據(jù)類型的全零數(shù)組,這篇文章主要給大家介紹了關(guān)于Python NumPy數(shù)組利器之np.zeros函數(shù)詳解與應(yīng)用實例的相關(guān)資料,需要的朋友可以參考下2024-06-06python實現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁核心內(nèi)容
這篇文章主要為大家介紹了python實現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁核心內(nèi)容的實現(xiàn),有需要的的朋友可以借鑒參考下,希望能有所幫助祝大家多多進步2021-11-11