Я могу использовать ввода-вывода.ждать() в качестве контекстного менеджера?
Почему бы этому не сработать:
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.