<p>对于成熟的分布式任务,您可以签出<a href="http://celeryproject.org/" rel="nofollow">Celery</a>及其重试机制<a href="http://ask.github.com/celery/userguide/tasks.html?highlight=retry#retrying-a-task-if-something-fails" rel="nofollow">Celery-retry</a></p>
<p>或者你可以看看<a href="http://wiki.python.org/moin/PythonDecoratorLibrary" rel="nofollow">Retry-decorator</a>,
示例:</p>
<pre><code>import time
# Retry decorator with exponential backoff
def retry(tries, delay=3, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff <= 1:
raise ValueError("backoff must be greater than 1")
tries = math.floor(tries)
if tries < 0:
raise ValueError("tries must be 0 or greater")
if delay <= 0:
raise ValueError("delay must be greater than 0")
def deco_retry(f):
def f_retry(*args, **kwargs):
mtries, mdelay = tries, delay # make mutable
rv = f(*args, **kwargs) # first attempt
while mtries > 0:
if rv == True: # Done on success
return True
mtries -= 1 # consume an attempt
time.sleep(mdelay) # wait...
mdelay *= backoff # make future wait longer
rv = f(*args, **kwargs) # Try again
return False # Ran out of tries :-(
return f_retry # true decorator -> decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
</code></pre>