python - 使用线程保持 FTP 控制端口处于事件状态

标签 python multithreading sockets ftp

我的 FTP 下载脚本(基于 ftplib)在大量下载时挂起。我正在使用的远程服务器虽然具有高度可配置性(proftpd),但无法通过远程网络施加的防火墙限制。

我在公司被限制使用被动模式,即 IT 不会为我打开允许 ​​FTP 主动模式的端口。

所以,我陷入了被动模式。

远程服务器在进行大量下载后 10 到 15 分钟就会断开连接。

我需要在大型下载期间保持控制连接处于事件状态。我应该使用线程,每十秒发送一个“NOOP”命令吗?如果是这样,请好心人给我发送一些可以解决问题的示例代码吗?我需要将多个值传递给我的 FTP 下载功能。 keepalive 函数不需要传递任何参数。

或者,有没有办法控制我在端口 21(控制连接)上使用的特定套接字,以在端口 nnnnnn 上进行大量下载时保持其事件状态?

非常感谢!

最佳答案

您也可以尝试使用 TCP KeepAlive 功能 通过添加以下代码:

import socket
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

TCP KeepAlive 的支持高度依赖于平台和防火墙 - 因此不能保证,但它是为此目的而设计的,并且比添加额外的线程要简单得多。您在哪些平台上工作?

关于python - 使用线程保持 FTP 控制端口处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269012/

相关文章:

multithreading - Clojure - 构建直播服务器的方式 - 有 promise ,但它是正确的方式

C# 套接字发送和接收的字节顺序

c# - 将 SslStream 与 IOCP 结合使用

python - 计算 Matrix 中的邻居数 - Conway Game of Life

python - 我可以禁用 mutmut 中的字符串突变吗?

python - 在拆分器中设置 pyqt 小部件的初始宽度

Python。弄清楚如何输入正确的电话号码

multithreading - 定时器和javafx

java - 释放所有等待线程

delphi - Indy TCP 客户端 ReadLn 函数挂起