В своих пауках обычно использую такую колонну:
async def crawl(future, client, pool):
futures = []
urls = await future
for request_future in asyncio.as_completed([request(client, url) for url in urls]):
parse_future = loop.run_in_executor(pool, parse, (await request_future))
futures.append(asyncio.ensure_future(crawl(parse_future, client, pool)))
if futures:
await asyncio.wait(futures)
Все бы хорошо, но при наличии большого количества ссылок, после выполнения запроса к серверу (запроса),результат сохраняется, а затем он обрабатывается пулом потоком.
Именно тогда, когда он сохраняется, используется большой объем оперативной памяти (теперь почти 8 ГБ).
Можно ли как-то изменить этот дизайн так, чтобы после запроса результат немедленно обрабатывался, ну или сохранялся до определенной суммы (например, 50), а затем пул потоков обрабатывался быстро.
те. Мне нужно снизить потребление оперативной памяти до приемлемого, но не потерять преимущества асинхронных запросов