Я пытаюсь получить некоторые данные из API с разбивкой на страницы (в частности, github, но API не имеет значения для этого вопроса). Я использую асинхронный генератор Python для получения каждой отдельной строки с каждой страницы. Код выглядит примерно так:
async def get_data():
cursor = None
with aiohttp.ClientSession() as session:
while True:
async with session.get(build_url(cursor)):
data = await response.json()
yield from get_rows(data)
if not has_next_page(data):
return
cursor = get_next_cursor(data)
Итак, это в принципе работает. Однако одним из незначительных недостатков является то, что он не инициирует следующий запрос до тех пор, пока не будут получены все строки с текущей страницы. Есть ли хороший способ инициировать эту обработку внутри этого цикла, прежде чем начать выход? В частности, я хочу убедиться, что async with
по-прежнему правильно оценивается при выполнении asyncio.ensure_future
, который является API для запуска фоновой работы.
yield from
вasync def
? - person user4815162342   schedule 27.06.2018get_rows
не асинхронный, да. - person Lucretiel   schedule 28.06.2018SyntaxError: 'yield from' inside async function
- person user4815162342   schedule 28.06.2018