У меня есть простой скрипт, который успешно загружает файл размером 75 МБ по FTP:
try:
ftp = ftplib.FTP(host)
ftp.login(username, password)
ftp.cwd(source_dir)
except ftplib.all_errors as e:
print('Ftp error = ', e)
return False
# Check filename exists
if filename in ftp.nlst():
local_filename = os.path.join(dest_dir, filename)
lf = open(local_filename, "wb")
ftp.retrbinary("RETR " + filename, lf.write)
lf.close()
print(filename, ' successfully downloaded')
else:
print(filename, ' not found in the path ', source_dir)
ftp.quit()
Этот сценарий отлично работает как на моем домашнем, так и на рабочем ноутбуке при запуске из Spyder IDE или запланированного задания Windows.
Я развернул точно такой же сценарий на виртуальной машине Windows в Azure.
- Файлы меньше 10 МБ скачиваются нормально.
- Файлы размером более 30 МБ возвращают исключение: 421 Тайм-аут данных. Переподключиться. Извините.
- Я получаю около 700 Мбит/с в Azure и только около 8 Мбит/с в своей домашней сети.
- Похоже на тайм-аут. Я вижу, что файл частично загружен.
Я попытался установить ftp.set_pasv(False), но это возвращает мне 500 недопустимых портов, чего и следовало ожидать. Я понимаю, что пассивный подход в любом случае является предпочтительным.
Что еще я могу сделать, чтобы устранить неполадки и решить эту проблему?