本人遇到坑的代码如下: from flask import Flask, request app = Flask(__name__) ##创建服务的sftp的连接 def get_scanner_sftp_connect(): host = config.remote_host # 主机 port = config.remote_port # 端口 username = config.remote_username # 用户名 password = config.remote_password # 密码 sf = paramiko.Transport(host, port) sf.connect(username=username, password=password) scanner_sftp = paramiko.SFTPClient.from_transport(sf) return scanner_sftp # scanner_sftp = get_scanner_sftp_connect() ####创建扫描仪服务链接sftp服务器 @app.route("/test_sftp", methods=["POST"]) def test_sftp(): print("创建连接") scanner_sftp = get_scanner_sftp_connect scanner_sftp.close() return "d调用结束" if __name__ == "__main__": app.run(host='0.0.0.0', port=40000, debug=True)
以上代码运行一段时间之后,尤其是调用接口的并发量很大的时候,就会报出以下问题:
Error reading SSH protocol banner[Errno 104] Connection reset by peer
Authentication failed Authentication timeout
解决之后的代码如下:
from flask import Flask, request app = Flask(__name__) ##创建服务的sftp的连接 def get_scanner_sftp_connect(): host = config.scanner_remote_host # 主机 port = config.scanner_remote_port # 端口 username = config.scanner_remote_username # 用户名 password = config.scanner_remote_password # 密码 sf = paramiko.Transport(host, port) sf.connect(username=username, password=password) sf.banner_timeout = 60##如果不添加这个运行一段时间之后会报Error reading SSH protocol banner[Errno 104] Connection reset by peer,并且让运维组调整服务器ssh的最大连接数即可解决 scanner_sftp = paramiko.SFTPClient.from_transport(sf) return scanner_sftp,sf # scanner_sftp = get_scanner_sftp_connect() ####创建扫描仪服务链接sftp服务器 @app.route("/test_sftp", methods=["POST"]) def test_sftp(): print("创建连接") scanner_sftp,sf= get_scanner_sftp_connect scanner_sftp.close() sf.close()##增加这个关闭才算是完全关闭 return "d调用结束" if __name__ == "__main__": app.run(host='0.0.0.0', port=40000, debug=True)