Как исправить проблему большого потребления оперативной памяти python asyncio? - PullRequest
0 голосов
/ 15 октября 2019

В своих пауках обычно использую такую ​​колонну:

 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), а затем пул потоков обрабатывался быстро.

те. Мне нужно снизить потребление оперативной памяти до приемлемого, но не потерять преимущества асинхронных запросов

...