每分钟检查是否生成*.odb文件。如果是>获得D

2024-06-17 14:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想每分钟都检查一下结果.ODB“已生成,如果此文件大于1.5 GB,则会启动另一个子进程从该文件获取数据。如何确保文件没有被写入,并且所有内容都包括在内?你知道吗

我希望你明白我的意思。你知道怎么处理吗?你知道吗

非常感谢。:)


Tags: 文件内容进程gb检查一下odb
1条回答
网友
1楼 · 发布于 2024-06-17 14:59:06

如果你无法控制写作过程,那么你在某个地方注定会失败。你知道吗

如果您确实控制了writer,那么“锁定”文件的一个简单方法就是创建一个符号链接。如果符号链接创建失败,则已在进行写入。如果成功了,您就获得了“锁”。你知道吗

但是如果您对文件的写入和创建没有任何控制权,就会出现问题。您可以尝试下面概述的方法:Ensuring that my program is not doing a concurrent file write
这将读取文件的时间戳,并从中“猜测”是否已完成写入。这比检查文件大小更可靠,因为最终文件可能超过大小阈值,但仍在写入。你知道吗

在这种情况下,问题是写入程序在您完整读取文件之前就开始写入了。现在,当读卡器正在读取的文件消失一半时,读卡器将失败。你知道吗

如果您在Unix平台上,无法控制写操作,而且您绝对需要这样做,我会这样做:

  1. 检查文件是否存在,如果存在,如果“上次写入”时间戳 是不是“足够大”让我认为文件就在那里
  2. 将文件重命名为其他名称
  3. 检查重命名的文件是否仍符合您的条件
  4. 从重命名的文件获取数据

然而,这最终会失败,你会失去一个更新,因为没有办法使这个原子。重命名将消除在读取之前覆盖文件的问题,但是如果写入程序决定在1到2之间开始写入,则不仅会收到不完整的文件,而且如果写入程序不喜欢文件中途消失,还可能会中断写入程序。你知道吗

我宁愿试着找到一种方法,以某种方式把这些行动联系起来。您的写入程序触发读取过程或添加锁定机制。写入1.5GB的数据不是瞬间的,最终会发生意想不到的事情。你知道吗

或者,如果你肯定不能做这样的事情,你能保证你的作者在N分钟左右最多写一次吗?如果您可以确定它在5分钟内不会写入两次,那么您可以在读取器中等待文件3分钟,然后重命名它并读取重命名的文件。您还可以检查是否可以防止写入程序重写。如果您能做到这一点,那么当文件“足够旧”并且在您决定的宽限期内没有更改时,您就可以安全地在您的读取器中处理该文件,并且当您读取了该文件后,您将删除该文件,从而允许下一次更新出现。你知道吗

在不了解更多有关您的环境和流程的情况下,这是我能想到的最好的方法。但这个问题没有普遍的解决办法。它需要一个适合您特定环境的解决方案。你知道吗

相关问题 更多 >