`fail_after` deadline is set on initialization not context entry
- Lingua principale
- Python
- Stelle
- 2.5k
- Fork
- 260
- Merge medio
- 1g 8h
- PR unite (30g)
- 17
Descrizione
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 https://github.com/agronholm/anyio/blob/0cbb84bfadd9078c5dad63bab43907ed0dd555a1/src/anyio/_core/_tasks.py#L112-L114
```python
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.
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.