编辑python脚本正在处理的文件

编辑python脚本正在处理的文件,python,concurrency,io,Python,Concurrency,Io,我正在尝试使用一个文件(csv、json、txt,尚未确定格式),我可以在其中放入几行数据。python脚本将在cron上每5分钟运行一次,并检查文件是否有任何新内容,如果有,则对其进行处理,并在处理过程中删除每一行 我试图防止这样一种情况:当进程抓取数据并清空文件时,我打开文件,进行一些更改并保存它,但我的保存将其写回 我认为唯一安全的方法是让它处理一个文件夹,然后查找新文件,所有更改都会被删除到一个新文件中。因此,这种情况永远不会发生 是否有更好的方法,或者这是最好的方法?您可以使用以下步骤

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

我试图防止这样一种情况:当进程抓取数据并清空文件时,我打开文件,进行一些更改并保存它,但我的保存将其写回

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


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

您可以使用以下步骤:

  • 在cron中运行的Python脚本将检查文件是否由任何其他进程打开。在Linux中,可以使用
    lsof
  • 如果文件处于打开状态,当cron运行时,它将不会处理文件数据
  • 如果其他脚本使用该文件,则可以为脚本添加相同的逻辑,该脚本将向文件添加数据
  • 检查,如果是,只需再等待5分钟,或者在内部睡眠,每10秒重试一次,直到它工作,但不超过4分钟,例如:

    for i in range(attempts):
        if not fileInUse():
            processFile()
        else:
            time.sleep(10)
    

    不确定这是否是你想要的:我支持上述建议。为此,文件系统级锁已经足够好了。如果您的文件系统支持,您也可以尝试将python脚本作为处理inotify事件的守护进程来运行。看见