【问题标题】:Best practice for watching and reliable uploading files in Python?在 Python 中观看和可靠上传文件的最佳实践?
【发布时间】:2014-04-18 17:07:58
【问题描述】:

我正在用 Python 2.7 为 Windows 构建一个桌面应用程序。此应用程序的主要功能是监视文件夹中的新文件。每当此文件夹中出现新文件时,应用程序就会将其上传到远程服务器。远程服务器上的进程为该文件创建一个 db 记录,并将远程文件路径存储在该记录中。

目前我使用watchdog 监控目录并使用httplib 进行文件上传。

  1. 我应该采取什么方法来确保无论网络状况或 Internet 连接中断如何都能可靠地上传新文件?

    更新:我所说的可靠上传是指即使应用重新启动,应用也会上传文件。像 Dropbox。有些文件非常大(> 100 MB),因此简单的解决方案(例如将代码包装在try / catch 中并重新开始上传)效率不高。我知道 Dropbox 使用 librsync,但在这种情况下可能有点矫枉过正。

  2. 如果源文件在上传过程中被更改了怎么办?我应该停止上传并重新开始吗?

【问题讨论】:

  • 对于您的第一个问题,我认为您可以捕获任何异常并重试;在while True 中使用try except 语句。
  • @ZeinabAbbasi 我想我有点错过了我的观点。我所说的“可靠”的意思不仅仅是在while True 循环中重试。即使程序重新启动,我也需要该应用程序来上传这些文件。即使PC重新启动。我确信 Dropbox 会以某种方式做到这一点。我不知道这里的最佳实践是什么,但我认为这是某种保留要上传的文件队列或在每次失败后一遍又一遍地跳过重新上传相同文件后使用librsync(文件可能很大)。我会更新问题。

标签: python file-upload python-watchdog


【解决方案1】:

您可以维护文件或文件名、时间戳和有关其上传状态的信息的数据库。根据该数据,您将知道哪些文件已发送,以及在应用程序或计算机重新启动后要上传哪些文件。

检查时间戳告诉您文件已被修改并且应该重新开始上传过程。

【讨论】:

  • 好主意!我认为这就是 Dropbox 正在做的事情:将文件列表保存在数据库中。您将如何在多任务处理方面构建此应用程序?现在我在一个进程中做所有事情(或线程,因为我正在使用watchdog)。
  • @Warwick 你绝对应该使用线程池来控制同时上传look here。我会这样做 1. 将有关文件上传请求的数据添加到数据库 2. 将这些请求添加到线程池 3. 在任何一次上传成功时更新适当的数据库行 4. 在任何一次上传失败时再次将上传请求添加到线程池 5 .我会有另一个线程定期检查数据库未成功请求并将它们再次添加到线程池中。发布另一个问题也许:)
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多