Python:两个脚本处理同一个文件,一个更新它,另一个在处理时删除数据

Python:两个脚本处理同一个文件,一个更新它,另一个在处理时删除数据,python,synchronization,Python,Synchronization,首先,我是Python新手。 现在我的问题是这样的: 我有一个在远程机器上运行的回调脚本 它发送一些数据并在本地计算机中运行脚本 它处理数据并写入文件。现在又一个 我的脚本本地需要处理文件数据 一个接一个,如果完成,则将其从文件中删除。 问题是文件可能正在不断更新。 我如何将工作简化,使其不致于混乱 我的档案。 也请建议我,如果同样的工作可以在一些地方完成 更好的方法。我建议使用一个数据库,其事务允许并发处理。我建议您查看命名管道或套接字,它们似乎比文件更适合您的用途。如果它真的在这两个应用程序

首先,我是Python新手。 现在我的问题是这样的:

我有一个在远程机器上运行的回调脚本 它发送一些数据并在本地计算机中运行脚本 它处理数据并写入文件。现在又一个 我的脚本本地需要处理文件数据 一个接一个,如果完成,则将其从文件中删除。 问题是文件可能正在不断更新。 我如何将工作简化,使其不致于混乱 我的档案。 也请建议我,如果同样的工作可以在一些地方完成
更好的方法。

我建议使用一个数据库,其事务允许并发处理。

我建议您查看命名管道或套接字,它们似乎比文件更适合您的用途。如果它真的在这两个应用程序之间,并且您可以控制这两个应用程序的源代码

例如,在unix上,您可以创建一个管道,如(请参阅):

然后像文件一样访问它:

dest = open("/some/unique/path", "w")  # on the sending side
src = open("/some/unique/path", "r")   # on the reading side
数据将在进程之间排队。它确实是一个文件,但它的行为(大部分)类似于一个文件


如果您不能使用这样的命名管道,我建议在模块中使用localhost上的IP套接字,最好是DGRAM套接字,因为您不需要在那里进行一些连接处理。您似乎已经知道如何进行网络连接。

如果问题不清楚,请告诉我。也许您需要阅读以下内容:@user1501994哪个操作系统?但正如我所提到的,第一个脚本将继续向文件中添加一些数据。第二个脚本可能会逐行读取并执行一些工作,如果成功,它将删除这些数据(每行)从该文件中。将管道用于此场景。据我所知,管道用于从一端读取和从另一端写入。啊,现在我明白了重点。您没有提到删除行仅在成功时发生。嗯。在这种情况下,您可以尝试以下操作。使用IPC的fifo并写出未成功的行完全复制到新文件。新文件将具有与场景中的中间文件相同的内容,但更易于管理。这里还有一个问题。在某个时间点,中间文件(管道)将变得巨大。由于不再需要较旧的数据,我如何对其进行修剪以使其减少。我不确定我是否正确理解了这种情况。fifo是线性结构,大小有限制。这意味着如果队列已满,写入过程将在尝试写入时阻塞。如果需要实时传输和poss要丢弃旧的(未处理的)数据,您可能需要不同的解决方案,可能基于数据报套接字和线程。感谢您的建议。但是脚本将处理的数据量非常少。
dest = open("/some/unique/path", "w")  # on the sending side
src = open("/some/unique/path", "r")   # on the reading side