Re: [問題] py程式之間的值如何傳遞
※ 引述《XiaoLuu5566 (洨嚕)》之銘言:
: 我有
: A.py
: B.py
: C.py
: 都在同一台電腦執行
: A負責計算答案 給出ans
: B跟C負責抄ans
: 目前的做法是
: A如果計算出來 就寫入txt檔
: B跟C就是每0.1秒讀取txt檔
: 但是這樣會有時間差
: 而且多了 寫入->等待 -> 讀取的工作
: 一直讀取硬碟不曉得會不會傷硬體
: 有沒有更專業的方法
跨程式通訊叫做IPC (Inter Process Communication)
原串中提到的redis, socket, file, pipe等等方式都是IPC的手段
然後沒事不要弄IPC,會有很多意想不到的問題
除非你很清楚自己在做什麼
雖然不知道詳細資訊,但我的直覺是你的情境還是滿單純的
如果一個需求有多種方法可以做到,而你不知道要選哪種
95%都是選最簡單的就好
以這個case來說,真的就是把A包成package就好
除非有什麼歷史因素不能動老程式
想像中的成品大概長這樣
import A
import B
import C
A.register_callback(B.handle)
A.register_callback(C.handle)
A.start()
start裡面要用sync還是async都無所謂
至於IPC會有什麼問題,我隨便舉兩個
1.如果redis server掛掉怎麼辦
A要繼續跑嗎? 把這段時間跑的結果存在memory
等redis復活後再一次送進去?
B和C的error handling又該怎麼做呢?
2. 如果B或C掛掉怎麼辦? 他們重新啟動後要怎麼記得上一次讀到哪?
還是他們要有自己的storage?
真的要選我反而推薦file
reids畢竟是外部媒介,多一個元件要維護,得到的好處也不明顯
然後redis有pub/sub
file有OS提供的filesystem event (可以查watchdog套件)
都不需要long polling就可以收到change event
file在寫入時都是append的話效能不會差到哪
也不用擔心什麼硬碟損壞問題,除非你每秒幾GB上下,不然現代硬碟沒那麼脆弱
你用redis它一樣有自己的persistant storage機制會把資料寫入disk
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.229.169 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1671118830.A.5BC.html
推
12/16 17:03,
2年前
, 1F
12/16 17:03, 1F
推
12/17 11:00,
2年前
, 2F
12/17 11:00, 2F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章