gpt4 book ai didi

python - 文件系统中的 ACID 事务

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:56 26 4
gpt4 key购买 nike

背景:

我通过串行连接从 arduino 获取温度 float 。我需要能够每 30 秒缓存一次此温度数据,以便其他应用程序(例如网络、恒温器 Controller )访问并且不会使串行连接过载。

目前我将这些数据缓存到 RAM 中作为/run 中的一个文件(我试图遵循 Linux 惯例)。然后,其他应用程序可以整天轮询文件以获取他们想要的温度,而现在唯一的瓶颈是 i/o(使用 rpi,因此这里没有很多企业级需求)。

问题:

我认为当应用程序读取这些文件时,它有读取损坏数据的风险。如果写入者更新文件,同时读取者尝试读取文件,是否会读取损坏的数据,导致恒温器运行不稳定?

我应该只使用 sqlite3 作为矫枉过正的解决方案,还是使用文件锁(这是否会冒其他无法正常工作的风险)?

这一切都发生在多个 python 进程中。 Linux 是否能够在 native 处理这种情况,或者我是否需要以某种方式应用提到的原则 here

最佳答案

调用 write(2) 应该是 atomic under Linux .

这意味着只要您在写入单个缓冲区,就可以确定读者不会读取不完整的记录。您可能希望使用 os.write 来确保不会发生您不知道的缓冲/分块。

if a read is happening and a file is updated, will the read use the new data while in the middle of a file, or does it somehow know how to get data from the old file (how)?

如果只有一个 read(2) 和一个 write(2),您一定会看到一致的结果。如果将写入分成两部分,则可能会发生写入第一部分、读取然后写入第二部分的情况,这将违反原子性。如果您需要编写多个缓冲区,请自行组合它们或使用 writev(2)

关于python - 文件系统中的 ACID 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com