python - 使用 Python 重复写入文件时防止 SD 卡过早磨损
问题描述
我正在从 Raspberry Pi 中的外部设备收集数据,每次 4 个字节,大约 100 个样本/秒。数据将写入安装操作系统的 SD 卡。
目前,我正在使用以下代码:
with open('data.dat', 'ab') as f:
while True:
sample_word = read_sample() # read 32 bits from a peripheral
f.write(sample_word.to_bytes(4, 'big'))
由于数据收集将运行几周,我不想通过连续写入相同的块来磨损 SD 卡。open()函数有一个缓冲参数,这表明我不需要为缓冲添加自定义逻辑:
buffering 是一个可选整数,用于设置缓冲策略。传递 0 以关闭缓冲(仅在二进制模式下允许),1 以选择行缓冲(仅在文本模式下可用),以及整数 > 1 以指示固定大小的块缓冲区的大小(以字节为单位)。当没有给出缓冲参数时,默认缓冲策略的工作方式如下:
- 二进制文件以固定大小的块缓冲;缓冲区的大小是通过尝试确定底层设备的“块大小”并回退到 io.DEFAULT_BUFFER_SIZE 的启发式方法来选择的。在许多系统上,缓冲区通常为 4096 或 8192 字节长。
启发式算法是否能很好地猜测 SD 卡块的大小?io.DEFAULT_BUFFER_SIZE
是8k。将大小传递给 buffing 参数是否更安全?如果是,最近的 SD 卡的最佳尺寸是多少?
解决方案
推荐阅读
- java - 如何一次打印一个单词两个字母?- 爪哇
- python - 未定义全局名称“tkagg”
- javascript - 了解为什么 Element UI 事件处理程序会触发 RangeError:超出最大调用堆栈大小?
- android - Android Q - 外部存储 (FileNotFoundException) 访问被拒绝
- git - 如何 Git diff 两个分支但显示类似于 Git 提交的输出?
- swift - 我可以在计时器中调用通知功能吗?
- big-o - 大 O 表示法(指数函数)
- python - 如何将两边用'/'分隔的列表中的元素合并在一起?
- python - 使用 boto3 和 MFA 自动处理会话令牌
- windows - 声明一个变量并使用它在一行中重定向输出