Задать вопрос
Paitor
@Paitor
Выпускник. Изучаю Python и прочее

Нормальная ли практика добавлять task в цикл не в функции main?

Вот например:
async def parse_base_ref(url):
    """функция получает страницу по url, берет оттуда ссылки, получает с данные с этих страниц, обрабатывает их и дает
    результат"""
    # *обработка url*
    res = await asyncio.gather(parse_inner_url(new_url1), parse_inner_url(new_url2), parse_inner_url(new_url3))
    # *обработка полученных данных


async def parse_inner_url(new_url):
    """получает страницу по url, находит в ней какие-то данные и возвращает их"""
    res = await parse(new_url)
    return res


async def main():
    await asyncio.gather(parse_base_ref(url1), parse_base_ref(url2), parse_base_ref(url3))


Нормальна ли подобная ситуация, когда корутина, которую мы запускаем в main, начинает планировать другие наши корутины? Для этого примера в частности и для других, когда количество вызовов подряд может быть больше.
Или лучше сделать возврат значений на каждом этапе, а потом передавать их в следующие функции, добавляя tasks только в функции main?
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@teenager_python
Данный код позволяет запускать несколько запросов к различным страницам одновременно с помощью asyncio.gather, что может быть полезно в некоторых случаях. Однако, если вам нужно более точно контролировать запуск корутин, то может быть более эффективным использовать другой подход, который предполагает передачу значений между функциями и запуск корутин с помощью asyncio.create_task в функции main.
Ответ написан
Комментировать
@Jack444
Всё отлично так и надо делать но будь аккуратнее, если сайт все запросы в базу направляет и с кешем у них плачевно то положить сайт можно спокойно, по ситуации смотри, часто приходится лимитировать количество запросов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы