问题描述
对 FTP 服务器不太了解...从 NOAA(国家海洋和大气管理局)FTP 服务器传输大量数据(以文本格式)并将其插入到 sql Server。它运行了数千万行,直到我遇到了我遇到的最大文件,大约 2.5MB [仅文本]。
for file in ftpList:
if file.endswith(".gz") and not FailedRun:
flo = io.BytesIO()
ftp.retrbinary('RETR ' + file,flo.write)
flo.seek(0)
with gzip.open(flo,'rb') as f:
for line in f:
## REPLACE FUNCTION FOR QUERY FILE ##
cursor.execute(qry_wx)
cursor.commit()
2021-01-02 12:07:19,558-ERROR-Error: 421 No transfer timeout (300 seconds): closing control connection
Traceback (most recent call last):
File "E:\PythonProjects\ISH\WX_TO_DB.py",line 72,in <module>
ftp.retrbinary('RETR ' + file,flo.write)
File "E:\ProgramData\Anaconda3\lib\ftplib.py",line 441,in retrbinary
self.voidcmd('TYPE I')
File "E:\ProgramData\Anaconda3\lib\ftplib.py",line 278,in voidcmd
return self.voidresp()
File "E:\ProgramData\Anaconda3\lib\ftplib.py",line 251,in voidresp
resp = self.getresp()
File "E:\ProgramData\Anaconda3\lib\ftplib.py",line 244,in getresp
raise error_temp(resp)
ftplib.error_temp: 421 No transfer timeout (300 seconds): closing control connection
我尝试将 FTP 类的初始调用中的超时参数更改为 >300 秒,但后来了解到此无传输超时是 FTP 服务器的默认设置,我无法更改。
我希望我能更好地解释这个问题,但就像我说的那样,我对此还很陌生,并不完全理解 retrbinary 方法。这里有什么建议吗?
解决方法
服务器有限制,在服务器终止连接之前,您不能传输任何文件的时间。
作为一种解决方法,首先下载所有文件。然后才处理它们。