Python FTP (ftplib): запросить более длительный тайм-аут? (WinError 10054 Существующее соединение было принудительно закрыто удаленным хостом)

Я загружаю много больших файлов (по 3,4 ГБ каждый) на веб-сайты с видеоматериалами и написал скрипт на Python, чтобы последовательно загружать их на каждый сайт. Обычно это работает без проблем, но сегодня файлы не удалось загрузить на один из сайтов, и для каждого файла возвращалось это сообщение об ошибке:

Traceback (most recent call last):
  File "D:\upload.py", line 174, in sequentially_upload_videos_to_sites
    ftp.storbinary('STOR {}'.format(item_name), fp, 8192)
  File "C:\Program Files\Python\Python38\lib\ftplib.py", line 492, in storbinary
    conn.sendall(buf)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

Я не понимаю, почему это происходит. Мой код не изменился по сравнению с предыдущими временами, когда он работал. Я предполагаю, что это проблема сервера, но я не уверен. Поскольку эти загрузки занимают много времени (у меня подключение к Интернету медленнее, чем было в прошлом, сейчас скорость составляет около 7 Мбит / с), мне интересно, не задерживает ли меня сервер по тайм-ауту. Есть ли способ подтвердить, что это проблема, и если да, то как запросить более длительное время ожидания? Для справки, когда я загрузил на этот веб-сайт кучу файлов меньшего размера, все они были успешно загружены .

Мой код в основном таков:

ftp = FTP()
ftp.set_debuglevel(2)
ftp.connect(df.loc[site_name]['Host'], 21)
ftp.login(df.loc[site_name]['Username'], df.loc[site_name]['FTP_Key'])
fp = open(item_path, 'rb')
ftp.storbinary('STOR {}'.format(item_name), fp, 8192)
fp.close()

Эти веб-сайты не поддерживают TLS.


person jippyjoe4    schedule 25.10.2020    source источник


Ответы (1)


И FTP constructor, и _ 2_ метод имеет параметр timeout (с тем же эффектом).

ftp.connect(host, timeout=30)

По умолчанию время ожидания равно глобальному времени ожидания по умолчанию.

person Martin Prikryl    schedule 29.10.2020