传输时 FTP 无传输超时 - Python ftplib

问题描述

对 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 方法。这里有什么建议吗?

解决方法

服务器有限制,在服务器终止连接之前,您不能传输任何文件的时间。

作为一种解决方法,首先下载所有文件。然后才处理它们。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...