如何读取 python 中另一个进程正在写入的文件?

How can one read a file being written by another process in python?

我有两个脚本,其中一个是从客户端接收数据。在对数据执行一些计算(在运行时)之后,它需要将结果保存到某个文件中。它仍然会每隔特定的时间间隔继续接收数据,并且必须用新值更新文件。

第二个脚本实际上是客户端,以某种固定的时间间隔发送数据。我需要此客户端也定期从其他脚本读取文件。

如何在 python 中执行此操作?从两边?即使碰巧另一个脚本正在更新文件,每 x 秒简单地执行一次 reader 是否可以节省?我假设每个时间单位 x 读取一个文件很慢,还有其他方法吗? (请提供一些 python 代码)

我想到的另一种方法是在我的客户端脚本中加入一小段代码作为小型后台服务器。第一个脚本将数据发送到该服务器,该服务器又更新一个全局变量。因此客户端只需要读取全局变量,后台服务器进行更新即可。这是一个坏主意吗?我该如何开始?

如果可以,请考虑为每个文件写入一个块。当计算机因断电而崩溃时,只会损坏最后一个文件。每个块一个文件允许编写器通过将文件从临时名称重命名为它的最终名称 data-42 来表示它已完成,比如 data-42.tmp。 Reader 记住它处理的最后一个文件,可以简单地统计下一个文件。编写器有许多其他 IPC 机制,如信号、共享内存、命名 FIFO、共享管道(如果编写器生成 reader)等。如果您不需要该文件,reader 可以在套接字上侦听writer 可以将数据写入其中。

reader 可以观察目录的变化。在 linux 上类似于 inotify。

如果您不希望每个块都有一个单独的文件,那么您的客户要么需要能够处理部分数据,要么他们需要就框架达成一致。比如说,如果一行以换行符终止,那么客户端读取它是安全的。例如,数据库使用校验和来检测损坏(即持久存储)。