Альтернативы retrying
: tenacity
и backoff
(обновление 2020 года)
Повторная попытка библиотека была ранее путь, но , к сожалению , у него есть какая - то ошибка и он не получил какие - либо обновлений , так как 2016 Других альтернатив , как представляются, с потерей мощности и прочности на разрыв . Во время написания этой статьи, у цепкости было больше звезд GItHub (2.3k против 1.2k), и она была обновлена совсем недавно, поэтому я решил использовать ее. Вот пример:
from functools import partial
import random # producing random errors for this example
from tenacity import retry, stop_after_delay, wait_fixed, retry_if_exception_type
# Custom error type for this example
class CommunicationError(Exception):
pass
# Define shorthand decorator for the used settings.
retry_on_communication_error = partial(
retry,
stop=stop_after_delay(10), # max. 10 seconds wait.
wait=wait_fixed(0.4), # wait 400ms
retry=retry_if_exception_type(CommunicationError),
)()
@retry_on_communication_error
def do_something_unreliable(i):
if random.randint(1, 5) == 3:
print('Run#', i, 'Error occured. Retrying.')
raise CommunicationError()
Приведенный выше код выводит что-то вроде:
Run# 3 Error occured. Retrying.
Run# 5 Error occured. Retrying.
Run# 6 Error occured. Retrying.
Run# 6 Error occured. Retrying.
Run# 10 Error occured. Retrying.
.
.
.
Дополнительные настройки tenacity.retry
перечислены на странице цепкости GitHub .
range(100)
без первого параметра. Если вы используете Python 2.x, который вы могли бы использоватьxrange(100)
, он генерирует итератор и использует меньше памяти. (Не то, чтобы это