Overview
waiting is a small library for waiting for stuff to happen. It basically waits for a function to return True, in various modes.
Waiting is compatible with flux for simulated timelines.
Usage
The most basic usage is when you have a function you want to wait for:
>>> predicate = lambda : True
Waiting forever is very simple:
>>> from waiting import wait, TimeoutExpired >>> wait(predicate) True
If your predicate returns a value, it will be returned as the result of wait():
>>> result = object() >>> wait(lambda: result) is result True
A timeout parameter can also be specified:
>>> wait(predicate, timeout_seconds=10.5) True
When a timeout expires without the predicate being fullfilled, an exception is thrown:
>>> try: ... wait(lambda : False, timeout_seconds=0) ... except TimeoutExpired: ... # expired! ... pass ... else: ... assert False
Sleeping polls the predicate at a certain interval (by default 1 second). The interval can be changed with the sleep_seconds argument:
>>> wait(predicate, sleep_seconds=20) True
When waiting for multiple predicates, waiting provides two simple facilities to help aggregate them: ANY and ALL. They resemble Python’s built-in any() and all(), except that they don’t call a predicate once it has been satisfied (this is useful when the predicates are inefficient and take time to complete):
>>> from waiting import wait, ANY, ALL >>> wait(ANY([predicate, predicate])) True >>> wait(ALL([predicate, predicate])) True
TimeoutExpired exceptions, by default, don’t tell you much about what didn’t happen that you were expecting. To fix that, use the waiting_for argument:
>>> 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
Exponential backoff is supported for the sleep interval:
>>> 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
If your predicate might raise certain exceptions you wish to ignore, you may use expected_exceptions to ignore them:
>>> from waiting import wait >>> wait(predicate, expected_exceptions=ValueError) True >>> wait(predicate, expected_exceptions=(ValueError, AttributeError)) True
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file waiting-1.2.1.tar.gz.
File metadata
- Download URL: waiting-1.2.1.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b40d6baa7bfdbf84a8ab3753c4f058a3930ec96a4c908bac36b61367e8f1ae6
|
|
| MD5 |
f72a0d44347525bb6d688c14244e3451
|
|
| BLAKE2b-256 |
a4198673e5edafa47e74fe9b3688dd7d2d57b4d8ede62e8263b3ed9ca9cbfbb9
|