<p>您可以将<code>wait_func</code>参数用于<code>retry</code>,该函数将尝试次数和延迟毫秒数作为参数,并根据需要打印消息:</p>
<pre><code>from retrying import retry
import time
def wait(attempts, delay):
print('Attempt #%d, retrying in %d seconds' % (attempts, delay // 1000))
return delay
@retry(wait_func=wait)
def f():
time.sleep(1)
raise RuntimeError
f()
</code></pre>
<p>该输出:</p>
^{pr2}$
<p>但是,如果您想使用指数睡眠选项,则必须实例化您自己的<code>Retrying</code>实例并使用自定义装饰器来使用它,以便您的自定义<code>wait</code>函数可以使用您的<code>Retrying</code>实例调用<code>exponential_sleep</code>方法:</p>
<pre><code>from retrying import Retrying
def wait(attempts, delay):
print('Attempt #%d, retrying in %d seconds' % (attempts, delay // 1000))
return retrying.exponential_sleep(attempts, delay)
retrying = Retrying(wait_func=wait, stop_max_attempt_number=10, wait_exponential_multiplier=1000, wait_exponential_max=10000)
custom_retry = lambda f: lambda *args, **kwargs: retrying.call(f, *args, **kwargs)
@custom_retry
def f():
raise RuntimeError
f()
</code></pre>
<p>该输出:</p>
<pre><code>Attempt #1, retrying in 0 seconds
Attempt #2, retrying in 2 seconds
Attempt #3, retrying in 6 seconds
Attempt #4, retrying in 14 seconds
Attempt #5, retrying in 24 seconds
Attempt #6, retrying in 34 seconds
...
</code></pre>