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

作者: HuangJC (吹笛牧童)   2023-01-26 10:51:09
謝謝你的討論,我好像看到適合我的東西 XD
我的例子是我要寫出 sensor(比如讀取溫度計)
還有另外寫出使用 sensor 值運作的程式
socket 我會寫,但處理斷線,timeout 的邏輯累死我了
後來我用 mqtt
除掉處理斷線,timeout 等等問題
這種類似 call back 的邏輯給我另一種困擾, 比如
sensor.py 送出溫度計值
然後 relay.py 就必需接收到這個值處理起來
但其實我不在乎溫度計何時傳值給我
我在乎的是最後一個值是什麼
比如五秒有五次更新值,反正我在第五秒才想處理
那前四次的值其實我不在乎,就讓它消失吧..
用 mqtt 其實我就是在收到訊息時,on_message 自己維護一塊記憶體先塞進去
何時要用此值,才去問那塊記憶體
檔案可以擔此重任,用覆蓋的就好
但不同程式間 multitask, 就不要寫入端開檔/清空,還沒寫入,讀取端就來讀耶
那我又有其他困擾了
》何時要用此值,才去問那塊記憶體
Redis 不就替我做了這事
而且可以跨電腦
檔案的話,不知有沒有一定要關檔(所以保證寫入完畢),其他程式才能開檔的檢查
這問題在 multi-thread 裡即使是記憶體變數,也是很常面對的
但用 python 我一直都不用理,因為 python 的多工有個 GIL 在,它的 ATOM 太大了
若在 C,我就吃了不少虧,常常要設 critical section
而 Redis 應該就是跨電腦很適合吧..
當有多台電腦跑 relay.py,
他們何時需要資料,就何時去問 sensor.py 那台電腦
而不是 sensor.py 經常主動推播,漏收訊息也不好
不想收,它也一直推給所有來註冊的電腦
(喔,mqtt 採訂閱制,不想收就不訂閱,困擾沒那麼大)
很值得我參考。
作者: Arataki (Get busy living)   2023-01-26 15:58:00
Import watchdog to reopen socket time out or broken
作者: DavisX   2023-01-26 16:37:00
有沒考慮用EPICS去弄device並存入PV 再用PYEPICS去讀
作者: Arataki (Get busy living)   2023-01-26 18:06:00
EPICS 牛刀殺小雞,不過用它真的沒問題,但是要先學會它
作者: Hsins (翔)   2023-01-26 19:48:00
Process Variables
作者: lycantrope (阿寬)   2023-01-27 21:48:00
mmap
作者: TakiDog (多奇狗)   2023-01-28 04:50:00
SharedMemory(mmap) 你的例子只是差了一個lockmultiprocessing 先去看完
作者: leolarrel (真.粽子無雙)   2023-01-30 10:05:00
ZMQ or DBUS , 供參

Links booklink

Contact Us: admin [ a t ] ucptt.com