【发布时间】:2015-07-23 00:33:00
【问题描述】:
我需要从 FTP 服务器下载一些大文件(每个文件 >30GB)。我正在使用 python 标准库中的 ftplib,但有一些陷阱:如果我下载一个大文件,如果文件完成,我将无法再使用连接。之后我收到 EOF 错误,因此连接已关闭(由于超时?)并且对于每个后续文件,我都会收到错误 421。
根据我的阅读,有两个联系。数据和控制通道,其中数据通道似乎工作正常(我可以完全下载文件)但同时控制通道超时。 我还读到 ftplib(和其他 python ftp 库)不适合大文件,可能只支持大约 1GB 的文件。 这里有一个与此主题类似的问题:How to download big file in python via ftp (with monitoring & reconnect)? 这不太一样,因为相比之下我的文件很大。
我当前的代码如下所示:
import ftplib
import tempfile
ftp = ftplib.FTP_TLS()
ftp.connect(host=server, port=port)
ftp.login(user=user, passwd=password)
ftp.prot_p()
ftp.cwd(folder)
for file in ftp.nlst():
fd, local_filename = tempfile.mkstemp()
f = open(fd, "wb")
ftp.retrbinary('RETR %s' % file, callback=f.write, blocksize=8192)
f.close()
是否对它或我可以使用的其他支持大文件的库进行任何调整?
【问题讨论】:
-
您找到解决方法了吗?遇到类似问题