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
Metadata
Release files for waiting 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| waiting-1.2.1.tar.gz | 7.9 kB | Without provenance | Details |
Release files / waiting-1.2.1.tar.gz
| Download URL | waiting-1.2.1.tar.gz |
|---|---|
| Size | 7.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b40d6baa7bfdbf84a8ab3753c4f058a3930ec96a4c908bac36b61367e8f1ae6
|
|
BLAKE2b-256 checksum How to use checksums |
a4198673e5edafa47e74fe9b3688dd7d2d57b4d8ede62e8263b3ed9ca9cbfbb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for waiting 1.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.