等待事情发生的工具

waiting的Python项目详细描述


概述

waiting是一个等待事情发生的小库。它基本上是等待函数以各种模式返回true

waiting与模拟时间线的flux兼容。

用法

最基本的用法是当您有一个要等待的函数时:

>>> predicate = lambda : True

永远等待很简单:

>>> from waiting import wait, TimeoutExpired
>>> wait(predicate)
True

如果谓词返回一个值,它将作为wait()的结果返回:

>>> result = object()
>>> wait(lambda: result) is result
True

还可以指定timeout参数:

>>> wait(predicate, timeout_seconds=10.5)
True

当在谓词未满的情况下超时过期时,将引发异常:

>>> try:
...     wait(lambda : False, timeout_seconds=0)
... except TimeoutExpired:
...     # expired!
...     pass
... else:
...     assert False

sleep以一定的间隔(默认为1秒)轮询谓词。可以使用sleep\u seconds参数更改间隔:

>>> wait(predicate, sleep_seconds=20)
True

当等待多个谓词时,waiting提供了两个简单的工具来帮助聚合它们:anyall。它们类似于python内置的any()all(),只不过它们在满足谓词之后不会调用它(当谓词效率低下并且需要时间才能完成时这很有用):

>>> from waiting import wait, ANY, ALL
>>> wait(ANY([predicate, predicate]))
True
>>> wait(ALL([predicate, predicate]))
True

默认情况下,TimeoutExpired异常不会告诉您预期中没有发生的事情。要解决这个问题,请使用waiting\u for参数:

>>> try:
...     wait(lambda : False, timeout_seconds=0, waiting_for="something that will never happen") #doctest: +ELLIPSIS
... except TimeoutExpired as e:
...     print(e)
Timeout of 0 seconds expired waiting for something that will never happen

睡眠间隔支持指数退避:

>>> from waiting import wait
>>> wait(predicate, sleep_seconds=(1, 100)) # sleep 1, 2, 4, 8, 16, 32, 64, 100, 100, ....
True
>>> wait(predicate, sleep_seconds=(1, 100, 3)) # sleep 1, 3, 9, 27, 81, 100, 100, 100 ....
True
>>> wait(predicate, sleep_seconds=(1, None)) # sleep 1, 2, 4, 6, .... (infinity)
True
>>> wait(predicate, sleep_seconds=(1, None, 4)) # sleep 1, 4, 16, 64, ... (infinity)
True

如果谓词可能引发某些希望忽略的异常,则可以使用expected_exceptions忽略它们:

>>> from waiting import wait
>>> wait(predicate, expected_exceptions=ValueError)
True
>>> wait(predicate, expected_exceptions=(ValueError, AttributeError))
True

如果希望在等待谓词完成时维护更新,可以使用on_poll在每次睡眠后传递函数以执行某些行为。默认情况下,这是禁止操作。

>>> import logging
>>> from waiting import wait
>>> try:
...    wait(lambda: False, timeout_seconds=5,               # Timeout after 5 seconds
...          on_poll=lambda: logging.warn("Waiting...")) # Log "Waiting..." six times.
... except TimeoutExpired:
...    pass
... else:
...    assert False

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

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy