Python多程式之資料交換Pipe
multiprocessing.Pipe()方法會返回一個管道(列表的形式)的兩個埠,一個埠作為輸入端,一個埠作為輸出端,如程式A的輸出可以作為程式B的輸入,程式B的輸出可以作為程式A的輸入,預設是全雙工模式。
Pipe()方法返回的物件具有傳送訊息send()方法和接收訊息recv()方法。呼叫接收recv()方法時,如果管道中沒用訊息會一直阻塞,如果管道關閉,則會丟擲EOFError異常。
示例:
import multiprocessing
import time
def task1(pipe):
for i in range(5):
str = f"task1-{i}"
print(f"{time.strftime('%H:%M:%S')} task1 傳送:{str}")
pipe.send(str)
time.sleep(2)
for i in range(5):
print(f"{time.strftime('%H:%M:%S')} task1 接收: { pipe.recv() }")
def task2(pipe):
for i in range(5):
print(f"{time.strftime('%H:%M:%S')} task2 接收: { pipe.recv() }")
time.sleep(1)
for i in range(5):
str = f"task2-{i}"
print(f"{time.strftime('%H:%M:%S')} task2 傳送:{str}")
pipe.send(str)
if __name__ == "__main__":
pipe = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=task1, args=(pipe[0],)) # pipe[0]管道傳送訊息的埠
p2 = multiprocessing.Process(target=task2, args=(pipe[1],)) # pipe[1]管道接收訊息的埠
p1.start()
p2.start()
p1.join()
p2.join()
輸出: 大連人流醫院
17:23:53 task1 傳送:task1-0
17:23:53 task1 傳送:task1-1
17:23:53 task1 傳送:task1-2
17:23:53 task1 傳送:task1-3
17:23:53 task1 傳送:task1-4
17:23:53 task2 接收: task1-0
17:23:53 task2 接收: task1-1
17:23:53 task2 接收: task1-2
17:23:53 task2 接收: task1-3
17:23:53 task2 接收: task1-4
17:23:54 task2 傳送:task2-0
17:23:54 task2 傳送:task2-1
17:23:54 task2 傳送:task2-2
17:23:54 task2 傳送:task2-3
17:23:54 task2 傳送:task2-4
17:23:55 task1 接收: task2-0
17:23:55 task1 接收: task2-1
17:23:55 task1 接收: task2-2
17:23:55 task1 接收: task2-3
17:23:55 task1 接收: task2-4
說明:定義了兩個任務函式,task1先發5條訊息,再接收訊息,task2先接收訊息,再傳送訊息。呼叫time.sleep()只是讓輸出更好看點,不會影響管道的接收和傳送。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2760726/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python多程式之Process、Pool、Lock、Queue、Event、Semaphore、PipePython
- Python並行程式設計(九):多程式物件交換之pipe(管道)實現生產者-消費者模型Python並行行程程式設計物件模型
- python-資料交換Python
- [Python] pipe模組Python
- 原始碼分析:Exchanger之資料交換器原始碼
- 使用Bundle在Activity之間交換資料
- 交換資料
- linux程式設計之pipe()函式Linux程式設計函式
- Python 多程式和資料傳遞的理解Python
- Python 多程式的自定義共享資料型別Python資料型別
- python--進位制轉換和資料交換Python
- 資料交換格式:Protocol BufferProtocol
- 對於Pipe管道之愛 - jessfraz
- linux系統程式設計之管道(一):匿名管道(pipe)Linux程式設計
- 如何使用 Protobuf 做資料交換
- MysqlsqoopHDFS 資料交換實驗MySqlOOP
- python中多程式處理資料庫連線的問題Python資料庫
- Python之資料型別Python資料型別
- Python資料分析之numpyPython
- Python資料分析之pandasPython
- python之資料庫支援Python資料庫
- Python多程式Python
- 豬行天下之Python基礎——9.1 Python多執行緒與多程式(上)Python執行緒
- 豬行天下之Python基礎——9.2 Python多執行緒與多程式(中)Python執行緒
- 豬行天下之Python基礎——9.3 Python多執行緒與多程式(下)Python執行緒
- Python基礎之Python資料世界Python
- Python多程式使用佇列共享資料協同判斷素數Python佇列
- Python多程式處理:如何將大量資料放入有限記憶體Python記憶體
- 前後端資料交換互動後端
- python:python的多程式Python
- Python 資料科學之 PandasPython資料科學
- 【Python資料科學】之NumpyPython資料科學
- python 操作 excel 之資料清洗PythonExcel
- python資料結構之棧Python資料結構
- Python之 操作 MySQL 資料庫PythonMySql資料庫
- Python資料分析之Pandas篇Python
- Python 資料結構之DataframePython資料結構
- 【Python】資料結構之字典Python資料結構