2013-12-07 4 views
0

Как установить тайм-аут в 10 ~ секунд, и если он не может загрузить или пропустить, чтобы повторить попытку?Настройка try/timeout с ftplib в python?

Текущий код:

print "Uploading LIST{}.html".format(counter) 
ftp_session = ftplib.FTP('ftp.website.com','[email protected]','password123') 
rss_ftp_file = open('OUTPUT/LISTS/LIST{}.html'.format(counter),'r') 
ftp_session.cwd("/LISTS/") 
ftp_session.storlines('STOR LIST{}.html.tmp'.format(counter), rss_ftp_file) 
rss_ftp_file.close() 
ftp_session.rename('LIST{}.html.tmp'.format(counter), 'LIST{}.html'.format(counter)) 
ftp_session.quit() 

Пробовал следующие

for i in range(3): 
    try: 
     print "Uploading LIST{}.html".format(counter) 
     ftp_session = ftplib.FTP('ftp.website.com','[email protected]','password123','',60) 
     rss_ftp_file = open('OUTPUT/LISTS/LIST{}.html'.format(counter),'r') 
     ftp_session.cwd("/LISTS/") 
     ftp_session.storlines('STOR LIST{}.html.tmp'.format(counter), rss_ftp_file) 
     rss_ftp_file.close() 
     ftp_session.rename('LIST{}.html.tmp'.format(counter), 'LIST{}.html'.format(counter)) 
     ftp_session.quit() 
     break 
    except: 
     continue 
else: 
    open('OUTPUT/LISTS/LIST{}.html'.format(counter),'w').close() 

Но загружать каждый список в 3 раза, он должен загрузить список, и если он timesout, то он должен попробовать еще раз, но если он timesout 3 раза он должен удалить содержимое из списка, как показано на рисунке. Если он успешно загружать не надо попробовать еще раз, и он не должен пропускать другое заявление

Благодарности
- HYFLEX

ответ

3

Вы можете задать параметр timeout в FTP конструктор (до тех пор, пока вы работаете 2.6+).

class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])

Возвращает новый экземпляр класса FTP. Когда указывается host, производится вызов метода connect(host). Когда задано user, дополнительно производится вызов метода login(user, passwd, acct) (где passwd и acct по умолчанию пустая строка, если не задана). Необязательный параметр timeout указывает тайм-аут в секундах для блокировки операций, таких как попытка подключения (если не указано, будет использоваться глобальная настройка таймаута по умолчанию).

Я считаю, что последующие операции блокировки, которые занимают больше времени, чем ваш timeout поднимет socket.timeout исключение. Вы можете поймать их и при необходимости повторить попытку.

Смежные вопросы