Я могу использовать ввода-вывода.ждать() в качестве контекстного менеджера?
Почему бы этому не сработать:
try:
async with asyncio.wait_for(aiohttp.get(url), 2) as resp:
print(resp.text())
except asyncio.TimeoutError as e:
pass
Дает
async with asyncio.wait_for(aiohttp.get(url), 2) as resp:
AttributeError: __aexit__
В моем понимании, asyncio.wait_for()
передал бы будущее aiohttp.get()
, которое имеет __aenter__
и __aexit__
Метод (о чем свидетельствует тот факт, что async with aiohttp.get()
работает).
1 ответ:
Вы не можете писать
async with wait_for(...)
--wait_for
не поддерживает асинхронный контекстный менеджер.Я скоро добавлю
Timeout
класс кasyncio
- смотрите https://groups.google.com/forum/#! тема/python-tulip / aRc3VBIXyRc разговор.Сейчас вы можете попробовать
aiohttp.Timeout
(для этого требуется установить достаточно толстый пакет) -- или просто скопировать эти 40 строк кода.Интересная вещь: подход не требует
async with
- достаточно просто старого доброгоwith
.UPD я пропустил это вы уже используете aiohttp. Таким образом, просто следуйте второму примеру из главы aiohttp timeouts.