के विकल्प retrying
: tenacity
और backoff
(2020 अद्यतन)
पुन: प्रयास पुस्तकालय पहले से जाने का रास्ता था, लेकिन दुर्भाग्य से यह कुछ कीड़े है और के बाद से 2016 तक अन्य विकल्प होने लगते हैं यह अपडेट नहीं मिला है backoff और दृढ़ता । इसे लिखने के समय, तप में अधिक 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.
.
.
.
के लिए अधिक सेटिंग्स तप GitHub पृष्ठtenacity.retry
पर सूचीबद्ध हैं ।
range(100)
पहले पैरामीटर के बिना उपयोग कर सकते हैं । यदि आप पायथन 2.x का उपयोग करते हैंxrange(100)
, तो आप इसका उपयोग भी कर सकते हैं , यह एक पुनरावृत्ति उत्पन्न करता है और कम मेमोरी का उपयोग करता है। (ऐसा नहीं है कि यह केवल 100 वस्तुओं के साथ मायने रखता है।)