背景:文件系統中的ACID事務
我正在通過串行連接從arduino獲取溫度浮點數。我需要能夠每隔30秒緩存一次溫度數據,以便其他應用程序(例如網絡,恆溫控制器)訪問並且不會超載串行連接。
目前我緩存這些數據到RAM作爲文件在/運行(我試圖遵循Linux約定)。然後,其他應用程序可以通過I/O現在唯一的瓶頸(使用rpi,因此這裏沒有很多企業級需求)來輪詢文件的溫度,因爲它們整天都需要它。
問題:
我認爲,當一個應用程序讀取這些文件,它的風險讀取損壞的數據。如果作者更新文件,讀者嘗試同時讀取文件,可能會破壞數據讀取,導致恆溫器表現不正常?
我應該只使用sqlite3作爲一種矯枉過正的解決方案,或者使用文件鎖定(並且這樣做有其他風險,但不能完美工作)?
這一切都發生在多個python進程中。 Linux能夠在本地處理這種情況,還是需要以某種方式應用here提及的原則?
我認爲一個'write(2)'調用應該是[Linux下的原子](http://article.gmane.org/gmane.linux.kernel/43445)。 – a3f
有趣的是,這已經產生了大量的閱讀。我應該澄清,這些過程(一個寫,一個讀)正在python中發生。這會影響到什麼嗎? – mh00h
你可以用'strace(1)'檢查什麼系統調用被調用,或者只是使用'os.write',它應該直接映射到'write(2)',並提供相同的語義。 – a3f