Как определить тайм-ауты ftp-сервера в Python

Загрузка большого количества файлов на FTP-сервер. В середине моей загрузки время сервера не позволяет мне загружать все дальше. Кто-нибудь знает, как определить, был ли сервер тайм-аутом, повторно подключить и продолжить передачу данных? Я использую библиотеку ftp для Python для передачи.

благодаря

Вы можете просто указать тайм-аут для подключения, но для тайм-аутов во время передачи файлов или других операций это не так просто.

Поскольку storbinary и retrbinary методы позволяют вам обеспечить обратный вызов, вы можете реализовать сторожевой таймер. Каждый раз, когда вы получаете данные, вы возвращаете таймер. Если вы не получите данные по крайней мере каждые 30 секунд (или что-то еще), сторожевой пейджер попытается прервать и закрыть сеанс FTP и отправить событие обратно в цикл событий (или что-то еще).

ftpc = FTP(myhost, 'ftp', 30) def timeout(): ftpc.abort() # may not work according to docs ftpc.close() eventq.put('Abort event') # or whatever timerthread = [threading.Timer(30, timeout)] def callback(data, *args, **kwargs): eventq.put(('Got data', data)) # or whatever if timerthread[0] is not None: timerthread[0].cancel() timerthread[0] = threading.Timer(30, timeout) timerthread[0].start() timerthread[0].start() ftpc.retrbinary('RETR %s' % (somefile,), callback) timerthread[0].cancel() 

Если этого недостаточно, кажется, вам придется выбрать другой API. В Twisted framework есть поддержка протокола FTP, которая позволит вам добавить логику тайм-аута.