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並行程式設計(九):多程式物件交換之pipe(管道)實現生產者-消費者模型Python並行行程程式設計物件模型
- python-資料交換Python
- Python多程式之Process、Pool、Lock、Queue、Event、Semaphore、PipePython
- python--進位制轉換和資料交換Python
- 原始碼分析:Exchanger之資料交換器原始碼
- MysqlsqoopHDFS 資料交換實驗MySqlOOP
- 如何使用 Protobuf 做資料交換
- JSON資料交換格式有幾種?JSON
- 資料的交換輸出 hd 2016
- 前後端資料交換互動後端
- JSON筆記,用於資料交換JSON筆記
- [Python] pipe模組Python
- flask非同步資料交換celery的使用Flask非同步
- 交換兩個資料的三種方法
- NTFS的交換資料流ADS應用
- 內外網資料交換方式有哪些?
- 計算機網路中的資料交換計算機網路
- 在.NET使用JSON作為資料交換格式JSON
- 交換機是如何轉發資料包的?
- 資料共享交換平臺的實踐分享
- 16 口多模反射記憶體交換機:高速資料共享的核心樞紐反射記憶體
- Bond——大資料時代的資料交換和儲存格式大資料
- Python基礎之集合和資料型別轉換Python資料型別
- Vineyard 論文被 SIGMOD'2023 接收,助力計算引擎之間高效資料交換
- RestCloud ETL資料交換平臺,支援分散式部署RESTCloud分散式
- 流批一體資料交換引擎 etl-engine
- Python 多程式的自定義共享資料型別Python資料型別
- 1.1_3_1 電路交換、報文交換、分組交換
- 接入交換機、匯聚交換機、核心交換機的區別
- 論HPUX系統交換與偽交換UX
- 將json資料轉換為Python字典將json資料轉換為Python字典JSONPython
- vue的axios元件如何與PHP後端交換資料VueiOS元件PHP後端
- 用 Json 來實現 PHP 與 JavaScript 間資料交換JSONPHPJavaScript
- 國產 ETL工具 ETL產品 資料交換系統
- Python常用的四種數值交換方式!Python
- 交換原理
- 路由交換路由
- 對於Pipe管道之愛 - jessfraz