关于并发:编辑由python脚本处理的文件

Edit file being processed by python script

我正在尝试使用一个文件(csv,json,txt,尚未决定格式),我可以在其中放入几行数据。python脚本将在cron上运行,每5分钟运行一次,检查文件是否有任何新的内容,如果有,处理它,并在处理时删除每一行。

我试图防止在进程获取数据并清空文件时打开文件、进行一些更改并保存它,但保存操作会将其写回。

我认为确保安全的唯一方法是让它处理一个文件夹,然后只查找新文件,所有更改都将被放到一个新文件中。所以这种情况永远不会发生。

有没有更好的方法,或者这是最好的方法?


检查此答案以查看文件是否已打开,如果已打开,则只需再等待5分钟,直到进入内部睡眠状态,或者每隔10秒重试一次,直到其工作,但不超过4分钟,例如:

1
2
3
4
5
for i in range(attempts):
    if not fileInUse():
        processFile()
    else:
        time.sleep(10)

您可以使用以下步骤:

  • 在cron中运行的python脚本将检查文件是否由任何其他进程打开。在Linux中,可以使用lsof来完成。
  • 如果文件是打开的,当cron运行时,它将不会处理文件数据。
  • 如果该文件被其他一些脚本使用,则可以为将向该文件添加数据的脚本添加相同的逻辑。