謝謝你的討論,我好像看到適合我的東西 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 採訂閱制,不想收就不訂閱,困擾沒那麼大)
很值得我參考。