【发布时间】:2021-04-28 13:09:28
【问题描述】:
我使用ftputil 从 FTP 服务器下载了一批文件。它引发了错误ftputil.error.FTPIOError: [Errno 60] Operation timed out。
keep_alive()尝试保持与远程服务器的连接处于活动状态,以防止发生超时。此方法主要用于在上传或下载文件时保持 FTPHost 对象的底层 FTP 连接处于活动状态。 这将需要在上传或下载过程中使用额外线程,或者从callback函数调用keep_alive。
我使用 callback 函数调用了 keep_alive,
ftp_host.download(source, target, callback=ftp_host.keep_alive)
但它引发了ERROR __main__ keep_alive() takes 1 positional argument but 2 were given。
如何保持 FTP 连接有效?
【问题讨论】:
-
您可能需要将 ftp_host.keep_alive 包装在一个仅使用一个参数调用它的 lambda 中
-
另一条评论说的是,当您将函数传递给
ftp_host.download的回调时,它会使用chunks参数调用,但ftp_host.keep_alive函数不接受任何参数,所以一种方法是callback=lambda chunks:ftp_host.keep_alive。来自文档“如果给定,将为每个传输的数据块调用回调:callback(chunk)” -
@python_user 哎呀,它引发了
ftplib.error_temp: 421 No transfer timeout (60 seconds): closing control connection。 -
遗憾的是我没有想法,我之前没有使用过这个库