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

看板Python作者 (LCH)時間2年前 (2022/12/15 23:40), 編輯推噓2(200)
留言2則, 2人參與, 2年前最新討論串2/3 (看更多)
※ 引述《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
file 還有一招,檔案存在 ramdisk
12/16 17:03, 1F

12/17 11:00, 2年前 , 2F
推 很實際的建議
12/17 11:00, 2F
文章代碼(AID): #1Zcp_kMy (Python)
文章代碼(AID): #1Zcp_kMy (Python)