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?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 2
@teenager_python
Данный код позволяет запускать несколько запросов к различным страницам одновременно с помощью asyncio.gather, что может быть полезно в некоторых случаях. Однако, если вам нужно более точно контролировать запуск корутин, то может быть более эффективным использовать другой подход, который предполагает передачу значений между функциями и запуск корутин с помощью asyncio.create_task в функции main.
Ответ написан
Комментировать
@Jack444
Всё отлично так и надо делать но будь аккуратнее, если сайт все запросы в базу направляет и с кешем у них плачевно то положить сайт можно спокойно, по ситуации смотри, часто приходится лимитировать количество запросов
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы