从服务器下载文件时处理 EOFError

Deal with EOFError while downloading files from server

用例:

使用 ftplib 下载数十万个 xmls 文件(大小从字节到 50 mb/file),结构如下 /year-month/year-month-day/hours/files。 所以我循环遍历给定日期的每个小时文件夹,对于每个小时文件夹,我用 ftp.nlst() 存储所有文件名,然后循环遍历每个文件名,然后像这样下载相关文件。

with open(local_file, 'wb') as fhandle:
    try:
        ftp.retrbinary('RETR ' + filename, fhandle.write)
    except EOFError:
        try:
            fhandle.close()
            os.remove(local_file)
            ftp = ftplib.FTP()
            ftp.connect(self.remote_host,self.port, timeout=60)
            ftp.login(self.username, self.passwd, acct="")
            ftp.cwd(self.input_folder + '/' + subdir)
            try:
                with open(local_file, 'wb') as fhandle:
                ftp.retrbinary('RETR ' + filename, fhandle.write, 8192)
            except:
                self.log.error('i give up !!!')

预期:

对于作为输入文件夹给出的每一天,下载所有相关的 xml 文件

我得到的:

EOFError

我已经尝试过的:

问题:

可能是我漏掉了什么? 如何处理此 EOFError 以继续下载我的所有文件...并且不会失去理智。

我终于找到了解决问题的方法。我现在不是为每个子文件夹打开一个连接,而是为每个要下载的文件打开一个连接。它的性能较差,但我通过了这个 EOFError。 我还发现我要从中下载文件的 FTP 服务器有限制,例如并行连接的数量或连接可以持续多长时间。