轮询和重试的延迟迭代。

waiter的Python项目详细描述


imageimageimageimageimageimageimageimageimageimage

python还需要另一个重试/轮询库吗? 它至少需要一个不与装饰器和函数耦合的。 装饰器阻止调用方自定义延迟选项, 并且围绕函数组织代码会妨碍对失败的任何自定义处理。

服务生是围绕迭代构建的, 因为重试/轮询的基础是一个缓慢执行的循环。 由此产生的界面更易于使用和更灵活, 将延迟算法与应用程序逻辑分离。

用法

创建

提供若干秒来无休止地重复,或任何可重复的秒数。

fromwaiterimportwaitwait(1)# 1, 1, 1, 1, ...wait([1]*3)# 1, 1, 1wait([0.5,0.5,60])# circuit breaker

Iterable延迟可以表示任何等待策略,还提供了常用算法的构造函数。

wait.count(1)# incremental backoff 1, 2, 3, 4, 5, ...wait(1)+1# alternate syntax 1, 2, 3, 4, 5, ...wait.fibonacci(1)# 1, 1, 2, 3, 5, ...wait.polynomial(2)# 0, 1, 4, 9, 16, ...wait.exponential(2)# exponential backoff 1, 2, 4, 8, ...backoff=wait(1)*2# alternate syntax 1, 2, 4, 8, ...backoff[:3]# limit attempt count 1, 2, 4backoff<=5# set maximum delay   1, 2, 4, 5, 5, 5, ...backoff.random(-1,1)# add random jitter

迭代

然后像任何iterable一样简单地使用wait对象,从而产生经过的时间量。 当然也支持超时。

fromwaiterimportwait,suppress,firstforelapsedinwait(delays):# first iteration is immediatewithsuppress(exception):# then each subsequent iteration sleeps as necessary...breakfor_inwait(delays,timeout):# standard convention for ignoring a loop variable...# won't sleep past the timeoutif...:breakresults=(...for_inwait(delays))# expressions are even easierfirst(predicate,results[,default])# filter for first true itemassertany(results)# perfect for tests too

功能

是的,提供了功能版本,而且实现起来很简单。

wait(...).throttle(iterable)# generate items from iterablewait(...).repeat(func,*args,**kwargs)# generate successive resultswait(...).retry(exception,func,*args,**kwargs)# return first success or re-raise exceptionwait(...).poll(predicate,func,*args,**kwargs)# return first success or raise StopIteration

decorator变量只是相应方法的部分应用程序。 注意装饰器语法不支持任意表达式。

backoff=wait(0.1)*2@backoff.repeating@backoff.retrying(exception)@backoff.polling(predicate)

但在现实世界中:

    该函数可能不存在或简洁地写成λ。 谓词可能不存在,也可以简洁地写成lambda <李>
  • 可能需要记录
  • 对不同的异常或结果可能有复杂的处理

因此,考虑块形式,就像装饰器不会呈现多余的with块一样。 另请注意wait对象是可重写的,前提是它们的原始延迟是。

异步

在python>;=3.6中,waiters还支持异步迭代。 throttle可选地接受异步。 repeatretrypoll可选地接受协程函数。

统计

waiter对象有一个stats属性,用于聚合有关所做调用的统计信息。 基本实现提供totalfailure计数。 对象本身的接口暂时被认为是临时的, 但是可以通过重写Stats类属性来扩展。 这还允许自定义iterable值;默认值是经过的时间。

安装

$ pip install waiter

依赖关系

  • 多方法(如果python>;=3.6)

测试

100%分行覆盖。

$ pytest [--cov]

更改

1.0

  • 将函数分批映射到iterable中

0.6

  • 可扩展的iterable值和统计信息
  • 附加构造函数:fibonacci,多项式,累加

0.5

  • 异步迭代

0.4

  • 装饰器支持方法
  • 可节流阀

0.3

  • 服务生的行为就像iterables而不是迭代器
  • 支持函数装饰器

0.2

  • suppress用于异常处理的上下文管理器
  • repeat解耦迭代法
  • first方便过滤的功能

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
二进制字符串的java NumberFormatExceprion   java如何在Neo4j中查找/匹配/选择标识符名称   java哪一年的日期与原始年份相同?   java什么时候JAXB可以用于Json而不是XML?   java使用PayPal权限API进行PayPal支付   java Getting error在使用安卓 vision api扫描二维码时加载图像失败   java直接突出显示RichTextFX中的一个文本范围   java Resolve@RegisteredAuth2AuthorizedClient,其令牌在spring Security 5.2的spring server之外获得。十、   yyyymmddhhmmss的Java正则表达式   java我试图将google recaptcha与spring mvc集成,但GreCaptCharResponse总是返回false。这里有一些代码   java使用JsonPath将文本转换为json   java无法解析符号。Maven依赖项已就位,但代码为红色   java使用循环查找范围内具有不同数字的数字   java这个SwingWorker是否不重用ThreadPoolExecutor中的线程?