Re: [問題] py程式之間的值如何傳遞

作者: as30385438 (LCT)   2022-12-15 23:40:28
※ 引述《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
作者: Schottky (順風相送)   2022-12-16 17:03:00
file 還有一招,檔案存在 ramdisk
作者: tzouandy2818 (Naked Bear)   2022-12-17 11:00:00
推 很實際的建議
作者: venomsoul (不怕太太)   2022-12-19 23:09:00
受教了
作者: blazers08 (我是傳奇)   2022-12-20 09:06:00
作者: smartree (阿路)   2022-12-26 23:02:00
受教了
作者: KingLHU (張大師)   2021-01-03 12:13:00
初學者,收益良多
作者: vvind (wind)   2021-01-11 13:14:00
作者: HuangJC (吹笛牧童)   2021-01-26 15:55:00
檔案的做法原本以為可以,但剛實驗有點問題...

Links booklink

Contact Us: admin [ a t ] ucptt.com