-
Notifications
You must be signed in to change notification settings - Fork 165
Open
Description
Discussed at https://gitter.im/python-trio/AnyIO?at=63ac6d617de82d261600ea24
When using a fail_after
context, the deadline is set at "initialization" time rather than __enter__
. See
anyio/src/anyio/_core/_tasks.py
Lines 112 to 114 in 0cbb84b
deadline = ( | |
(get_async_backend().current_time() + delay) if delay is not None else math.inf | |
) |
import anyio
async def main():
ctx = anyio.fail_after(5)
await anyio.sleep(5)
with ctx:
for i in range(1, 6):
print(i)
await anyio.sleep(1)
anyio.run(main)
❯ python example.py
1
Traceback (most recent call last):
File "/Users/mz/dev/prefect/example.py", line 168, in main
await anyio.sleep(1)
File "/opt/homebrew/Caskroom/miniconda/base/envs/orion-dev-39/lib/python3.9/site-packages/anyio/_core/_eventloop.py", line 83, in sleep
return await get_asynclib().sleep(delay)
File "/opt/homebrew/Caskroom/miniconda/base/envs/orion-dev-39/lib/python3.9/asyncio/tasks.py", line 652, in sleep
return await future
asyncio.exceptions.CancelledError
Since this is a context manager, the user expectation is that the timer starts when the context is entered.
Metadata
Metadata
Assignees
Labels
No labels