Python 在写入磁盘之前,是否有任何理由将ftp下载保存到内存中?

Python 在写入磁盘之前,是否有任何理由将ftp下载保存到内存中?,python,ftp,hard-drive,latency,Python,Ftp,Hard Drive,Latency,我正在用Python为公司的一些组织代码编写一个自定义ftp管理器。 我只是扩展了基本的retrbinary,给用户一些反馈,下载百分比,经过的时间,诸如此类的东西。我突然想到,我可以将下载的块保存到内存中,而不是在收到块后立即写入它们,然后在完成时写入整个二进制文件。或者,我可以将较小的块大小保存到内存中,并设置一个更大的截止大小,在该截止大小下进行磁盘写入,以块的形式写入磁盘,但块的大小要大于通过线路输入的块 我可以做这些事情。我还不知道是否有任何令人信服的理由去做这些事情。它可能会增加可靠

我正在用Python为公司的一些组织代码编写一个自定义ftp管理器。 我只是扩展了基本的retrbinary,给用户一些反馈,下载百分比,经过的时间,诸如此类的东西。我突然想到,我可以将下载的块保存到内存中,而不是在收到块后立即写入它们,然后在完成时写入整个二进制文件。或者,我可以将较小的块大小保存到内存中,并设置一个更大的截止大小,在该截止大小下进行磁盘写入,以块的形式写入磁盘,但块的大小要大于通过线路输入的块

我可以做这些事情。我还不知道是否有任何令人信服的理由去做这些事情。它可能会增加可靠性还是什么

谢谢

  • 如果将整个文件保存在内存中,则会占用一些资源。如果文件非常大,或者如果您同时下载多个文件,加起来“非常大”,您甚至可能会失败,因为内存不足(在32位系统上比在64位系统上更可能)。然后,您会希望在进行过程中保存,尤其是如果下载需要很长时间并且必须从头开始的话

  • 如果您保存了部分文件,但操作失败,则以后可以从失败的地方继续()

  • 如果保存文件的一部分,并且希望完全失败而不希望恢复,则可能需要编写(少量)额外代码来删除损坏的部分文件

  • 如果您打算边用边保存,那么等待同时将多个块写入磁盘并没有多大好处。通常情况下,网络I/O比磁盘I/O慢得多,但如果不是这样,则执行更少、更大的磁盘写入可能更有效。即使您关心这一点,也可以通过设置要写入的文件的缓冲区大小来实现(例如,使用
    buffering
    参数设置为
    open()
    )。没有必要编写自己的代码来保留一定数量的数据

我认为,通常情况下,一有数据,就会或多或少地将数据写入磁盘。可能有不同的特殊情况

如果不是因为您在运行中显示了进度,那么如果您使用一个
read()
调用将整个文件下载到内存中,代码可能会更简单(不确定是否有一种简单的方法可以特别使用
ftplib
实现,但还有其他下载机制可用)。由于您下载的文件是以小块的形式进行的,我怀疑这会使编写代码的过程变得非常复杂,但如果确实如此,那么这也值得考虑