blob: 5ec05a278598f5f31fa449de99ca3d14a971e944 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
Metadata-Version: 2.1
Name: async-timeout
Version: 3.0.1
Summary: Timeout context manager for asyncio programs
Home-page: https://github.com/aio-libs/async_timeout/
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache 2
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Framework :: AsyncIO
Requires-Python: >=3.5.3
async-timeout
=============
.. image:: https://travis-ci.org/aio-libs/async-timeout.svg?branch=master
:target: https://travis-ci.org/aio-libs/async-timeout
.. image:: https://codecov.io/gh/aio-libs/async-timeout/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/async-timeout
.. image:: https://img.shields.io/pypi/v/async-timeout.svg
:target: https://pypi.python.org/pypi/async-timeout
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
asyncio-compatible timeout context manager.
Usage example
-------------
The context manager is useful in cases when you want to apply timeout
logic around block of code or in cases when ``asyncio.wait_for()`` is
not suitable. Also it's much faster than ``asyncio.wait_for()``
because ``timeout`` doesn't create a new task.
The ``timeout(timeout, *, loop=None)`` call returns a context manager
that cancels a block on *timeout* expiring::
async with timeout(1.5):
await inner()
1. If ``inner()`` is executed faster than in ``1.5`` seconds nothing
happens.
2. Otherwise ``inner()`` is cancelled internally by sending
``asyncio.CancelledError`` into but ``asyncio.TimeoutError`` is
raised outside of context manager scope.
*timeout* parameter could be ``None`` for skipping timeout functionality.
Context manager has ``.expired`` property for check if timeout happens
exactly in context manager::
async with timeout(1.5) as cm:
await inner()
print(cm.expired)
The property is ``True`` if ``inner()`` execution is cancelled by
timeout context manager.
If ``inner()`` call explicitly raises ``TimeoutError`` ``cm.expired``
is ``False``.
Installation
------------
::
$ pip install async-timeout
The library is Python 3 only!
Authors and License
-------------------
The module is written by Andrew Svetlov.
It's *Apache 2* licensed and freely available.
CHANGES
=======
3.0.1 (2018-10-09)
------------------
- More aggressive typing (#48)
3.0.0 (2018-05-05)
------------------
- Drop Python 3.4, the minimal supported version is Python 3.5.3
- Provide type annotations
2.0.1 (2018-03-13)
------------------
* Fix ``PendingDeprecationWarning`` on Python 3.7 (#33)
2.0.0 (2017-10-09)
------------------
* Changed `timeout <= 0` behaviour
* Backward incompatibility change, prior this version `0` was
shortcut for `None`
* when timeout <= 0 `TimeoutError` raised faster
1.4.0 (2017-09-09)
------------------
* Implement `remaining` property (#20)
* If timeout is not started yet or started unconstrained:
`remaining` is `None`
* If timeout is expired: `remaining` is `0.0`
* All others: roughly amount of time before `TimeoutError` is triggered
1.3.0 (2017-08-23)
------------------
* Don't suppress nested exception on timeout. Exception context points
on cancelled line with suspended `await` (#13)
* Introduce `.timeout` property (#16)
* Add methods for using as async context manager (#9)
1.2.1 (2017-05-02)
------------------
* Support unpublished event loop's "current_task" api.
1.2.0 (2017-03-11)
------------------
* Extra check on context manager exit
* 0 is no-op timeout
1.1.0 (2016-10-20)
------------------
* Rename to `async-timeout`
1.0.0 (2016-09-09)
------------------
* The first release.
|