Использование asyncio.Queue может повысить производительность веб-краулеров, позволяя параллельно извлекать и анализировать веб-страницы. www.slingacademy.com
Некоторые преимущества такого подхода:
- Ускорение загрузки страниц. github.com Бот находит новые ссылки и запускает на разных сокетах несколько операций извлечения новых страниц. github.com По мере поступления результатов запросов он их анализирует и добавляет новые ссылки в очередь. github.com
- Снижение риска отключения из-за нехватки ресурсов. github.com Если для каждого запроса выделять отдельный поток, то приложение может отключиться из-за нехватки памяти или иного ресурса, связанного с обслуживанием потоков. github.com
- Улучшение масштабируемости. github.com В отличие от выделения отдельного потока для каждого запроса, сопрограммы, написанные на языке Python, занимают меньше памяти и позволяют запускать сотни тысяч из них. github.com
Однако в какой-то момент скорость работы может пойти на убыль, так как слишком много параллельно выполняемых операций ухудшает производительность. github.com Чтобы этого избежать, можно ограничить количество одновременных запросов и не выбирать из очереди ссылки до тех пор, пока не будут завершены некоторые уже активные запросы. github.com