我们设置了一个FTP系统来监视/下载不在我们控制下的远程FTP服务器。脚本连接到远程FTP,获取服务器上文件的文件名,然后检查它是否已经被下载。如果没有下载,则下载该文件并将其添加到列表中。
最近我们遇到了一个问题,远程FTP上的某个人会复制一个巨大的单个文件(>1GB),然后脚本会唤醒,看到一个新文件并开始下载正在复制的文件。
如何检查这个问题?我想获取文件大小,等待几秒钟,再次检查文件大小,看看它是否增加,如果没有增加,则下载它。但由于时间是关键,我们不能为每个文件集等待几秒钟,看看它的文件大小是否增加。
那么怎样才能最好地解决这个问题呢?目前所有操作都是通过Python的ftplib完成的,除了使用上述方法之外,我们还能做什么呢?
请注意,我们无法控制远程FTP站点。
更新1:
我在想,如果我尝试重命名它...既然我们在ftp上拥有完全权限,如果文件上传正在进行中,重命名命令会失败吗?
我们真的没有任何选择......对吗?
更新2:
好吧,这里有一些有趣的东西,我们测试的一些FTP似乎会自动分配空间一旦传输开始。
例如,如果我将一个200MB的文件传输到FTP服务器上。当传输正在进行时,如果我连接到FTP服务器并在上传过程中执行大小,则显示大小为200MB。即使文件只完成了大约10%。
权限似乎也是随机设置的,随着IIS一起提供的FTP服务器在文件完成复制后设置权限。而其他一些旧的FTP服务器则会在发送文件后立即设置权限。
:'(
最近我们遇到了一个问题,远程FTP上的某个人会复制一个巨大的单个文件(>1GB),然后脚本会唤醒,看到一个新文件并开始下载正在复制的文件。
如何检查这个问题?我想获取文件大小,等待几秒钟,再次检查文件大小,看看它是否增加,如果没有增加,则下载它。但由于时间是关键,我们不能为每个文件集等待几秒钟,看看它的文件大小是否增加。
那么怎样才能最好地解决这个问题呢?目前所有操作都是通过Python的ftplib完成的,除了使用上述方法之外,我们还能做什么呢?
请注意,我们无法控制远程FTP站点。
更新1:
我在想,如果我尝试重命名它...既然我们在ftp上拥有完全权限,如果文件上传正在进行中,重命名命令会失败吗?
我们真的没有任何选择......对吗?
更新2:
好吧,这里有一些有趣的东西,我们测试的一些FTP似乎会自动分配空间一旦传输开始。
例如,如果我将一个200MB的文件传输到FTP服务器上。当传输正在进行时,如果我连接到FTP服务器并在上传过程中执行大小,则显示大小为200MB。即使文件只完成了大约10%。
权限似乎也是随机设置的,随着IIS一起提供的FTP服务器在文件完成复制后设置权限。而其他一些旧的FTP服务器则会在发送文件后立即设置权限。
:'(