【问题标题】:How to determing if a file has finished downloading in python如何在python中确定文件是否已完成下载
【发布时间】:2011-11-21 22:27:08
【问题描述】:

我有一个名为raw_files 的文件夹。来自多个来源的超大文件(约 100GB 文件)将上传到此文件夹。

我需要从已完成上传到文件夹的视频中获取文件信息。确定文件当前是否正在下载到文件夹(通过)或视频是否已完成下载(运行脚本)的最佳方法是什么?谢谢。

【问题讨论】:

  • 您的上传软件应该通知(或运行)您的脚本。没有独立于平台的方式来判断文件是否“完成”。
  • 我认为您的问题已在this stackoverflow post 中得到解答。

标签: python


【解决方案1】:

如果您检查这些文件,请将文件的大小存储在某处。当您进入下一轮并且文件大小仍然相同时,您几乎可以认为它们已完成(取决于第一次和第二次检查之间的时间)。时间间隔可以例如设置为您的上传服务(FTP 等)的超时间隔。

没有任何特殊标志或内容表明文件已完成。

【讨论】:

    【解决方案2】:

    如果可以的话,最可靠的方法是修改上传软件。

    一个典型的方案是首先将每个文件上传到同一文件系统上的临时目录中,并在上传完成后移动到最终位置。这样的“移动”操作既便宜又原子。

    此主题的一个变体是使用临时名称(例如 file.dat.incomplete 而不是 file.dat)上传每个文件,然后重命名。您的脚本只需要跳过名为 *.incomplete 的文件。

    【讨论】:

    • 请注意,在 Windows 上移动文件不是原子操作。
    • @Sven Marnach:感谢您的评论。当文件移动在同一个文件系统中在Windows上不是原子的时,我很想听听实际的真实场景。另外还有MoveFileTransacted
    • stackoverflow.com/questions/167414/…。不过,我认为这不会在手头的案例中引入任何竞争条件。
    • @aix:感谢您的回复。我在这里的一个限制是我不是上传文件的人。这些文件来自多个来源。我唯一可以控制的是他们上传到的文件夹。这将如何改变这种情况?
    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多