Использование потоков для поддержки порта управления FTP - PullRequest
5 голосов
/ 11 марта 2011

Мой сценарий загрузки FTP (на основе ftplib) зависает при больших загрузках.Удаленный сервер, с которым я работаю, в то время как сильно настраиваемый (proftpd) не может преодолеть ограничения брандмауэра, налагаемые удаленной сетью.

Я ограничен в использовании пассивного режима в моей компании, т. Е. ИТ не откроет для меня порт, разрешающий активный режим FTP.

Итак, я застрял в пассивном режиме.

Удаленный сервер отключается от 10 до 15 минут для большой загрузки.

Я НЕОБХОДИМО поддерживать соединение управления активным во время большой загрузки.Должен ли я использовать многопоточность, посылая команду 'NOOP' каждые десять секунд?Если да, не могли бы вы, добрые души, отправить мне пример кода, который бы помог?Мне нужно передать несколько значений в мою функцию загрузки по FTP.Функция keepalive не нуждается в передаче каких-либо параметров.

Или есть ли способ управления конкретным сокетом, который я использую для порта 21 (управляющее соединение), чтобы поддерживать его, пока загрузка большого объема занимаетместо на порту nnnnnn?

Большое спасибо!

1 Ответ

6 голосов
/ 11 марта 2011

Вы также можете попытаться использовать функцию TCP KeepAlive, добавив следующий код:

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

Поддержка TCP KeepAlive сильно зависит от платформы и брандмауэра - поэтому не гарантируется, но она предназначена для этогоцель, и это было бы намного проще, чем добавление дополнительной темы.На каких платформах вы работаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...