I'm using paramiko to connect to an SFTP server on which I have to download and process some files.
The server has a timeout set to 5 minutes, but some days it happens that the processing of the files can take longer than the timeout. So, when I want to change the working directory on the server to process some other files sftp.chdir(target_dir))
I get an exception that the connection has timed out:
File buildbdist.win32eggparamikosftp: //ftp.py, строка 138, в _write_all поднять EOFError ()
Чтобы противостоять этому, я подумал, что активация поддержки активности будет лучшим вариантом, поэтому я использовал "set_keepalive" на транспорте, чтобы установить его на 30 секунд:
ssh = paramiko.SSHClient()
ssh.set_missing_hostkey_policy(paramiko.AutoAddPolicy())
ssh.connect(ssh_server, port=ssh_port, username=ssh_user, password=password)
transport = ssh.get_transport()
transport.set_keepalive(30)
sftp = transport.open_sftp_client()
Но вообще ничего не изменилось. Изменение не имеет абсолютно никакого эффекта. Я не знаю, неправильно ли я понимаю здесь концепцию set_keepalive
или, может быть, сервер (к которому у меня нет доступа) игнорирует пакеты keep alive .
Isn ' Является ли это правильным способом решения этой проблемы или мне следует попробовать другой подход? Мне не нравится идея "вручную" посылать серверу некоторую команду ls
, чтобы поддерживать сеанс в рабочем состоянии.