python-3.x - 装饰器 backoff.on_predicate 未按预期等待
问题描述
我正在检查调用之间的恒定间隔,发现在这个无限循环中,连续调用之间的时间不是 5 秒,而是随机变化的,尽管小于 5 秒。不明白,为什么。
from datetime import datetime
from backoff import on_predicate, constant
@on_predicate(constant, interval=5)
def fnc(i):
print('%s %d' % (datetime.now().strftime("%H:%M:%S:%f"),i), flush=True)
return i
for i in range(7):
fnc(i)
输出:
17:48:48:348775 0
17:48:50:898752 0
17:48:52:686353 0
17:48:53:037900 0
17:48:57:264762 0
17:48:58:348803 0
解决方案
该backoff
库使用抖动函数来随机化间隔。这通常是您在进行指数退避或类似操作时想要的,但在使用constant
等待生成器时可能会令人惊讶。要禁用抖动,请指定jitter=None
:
@on_predicate(constant, interval=5, jitter=None)
def fnc(i):
print('%s %d' % (datetime.now().strftime("%H:%M:%S:%f"),i), flush=True)
return i
推荐阅读
- python - 在 exec 中使用非本地
- angular - 如何在 Angular 9 中重新定位图像
- algorithm - 配对功能 - 对于大的实际输入,输出变为指数
- shopify - 如何使用 shopify 的 API 处理客户身份验证,即注册、登录和重置密码
- python - Django:修复付款视图中的错误
- javascript - 在新的发布请求后反映对 Mongo DB 的更改 - Mongoose 和 Nodejs
- ruby-on-rails - node_module 未在生产中加载
- python-3.x - Pyqt5 通知从头开始
- python - 没有名为“sklearn”的模块,但 pip 和 pip3 都显示包存在
- python - ValueError:发现样本数量不一致的输入变量:[218, 30]