作者as30385438 (LCH)
看板Python
標題Re: [問題] py程式之間的值如何傳遞
時間Thu Dec 15 23:40:28 2022
※ 引述《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://webptt.com/m.aspx?n=bbs/Python/M.1671118830.A.5BC.html
1F:推 Schottky: file 還有一招,檔案存在 ramdisk 12/16 17:03
2F:推 tzouandy2818: 推 很實際的建議 12/17 11:00
3F:推 venomsoul: 受教了 12/19 23:09
4F:推 blazers08: 推 12/20 09:06
5F:推 smartree: 受教了 12/26 23:02
6F:推 KingLHU: 初學者,收益良多 01/03 12:13
7F:推 vvind: 推 01/11 13:14
8F:推 HuangJC: 檔案的做法原本以為可以,但剛實驗有點問題... 01/26 15:55