Alternatifleri retrying
: tenacity
ve backoff
(2020 güncellemesi)
Yeniden deneme kütüphanesi daha önce gitmenin yoluydu, ancak ne yazık ki bazı hataları var ve 2016'dan beri herhangi bir güncelleme yok. Diğer alternatifler geri çekilme ve azim gibi görünüyor . Bunu yazarken, azim daha fazla GItHub yıldızına (2.3k vs 1.2k) sahipti ve daha yakın zamanda güncellendi, bu yüzden kullanmayı seçtim. İşte bir örnek:
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()
Yukarıdaki kod şöyle bir çıktı verir:
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.
.
.
.
İçin daha fazla ayar tenacity.retry
, dayanıklılık GitHub sayfasında listelenir .
range(100)
İlk parametre olmadan kullanabilirsiniz . Kullanabileceğiniz Python 2.x kullanıyorsanızxrange(100)
, bu bir yineleyici oluşturur ve daha az bellek kullanır. (Sadece 100 nesne ile önemli değil.)