Не шарю в асинхронности и очереди в python, что читать, смотреть?

Ссылка скопирована
1 ответ

Написал скрипт на python, решил, что он может понадобиться кому-то ещё, запихал его в fastapi приложение. Проблема в том, что сам скрипт требует около 2-3 минут на выполнение и с несколькими пользователями одновременно это всё точно не будет работать. Что вы можете посоветовать, чтобы разобраться во всём этом?

Дополнительно:

Ответы:

Если выполняется так долго, я бы сделал следующим образом:
Создал бы приложение celery с задачей, сделал бы ручку апи, которая запускает задачу и отдает ссылку на результат, ссылка на результат отдает либо "еще выполняется", либо результат.
Либо, вместо ссылки на результат, можно отправлять его на email.
Я бы написал docker-compose.yml с контейнерами api, nginx, celery, redis, но можно развернуть все любым удобным способом, это не обязательно.

  • какой-то докер головного мозга, часто достаточно просто вызывать create_task
    и celery тоже часто оверхед, есть куча более простых аналогов, а тут еще и asyncio
  • Everything_is_bad, как я уже упомянул в ответе:

    но можно развернуть все любым удобным способом, это не обязательно

    Просто когда нужно, чтобы сообща работали 3-4 процесса, докер очень удобно лично мне.

  • chemdev, прикрутил celery, все работает как я и хотел, осталось разобраться в докере. Спасибо!

Что вы можете посоветовать, чтобы разобраться во всём этом?

начни с чтение оф доков по библиотеки asyncio

В этом коде задачи будут добавляться в очередь без ожидания и выполняться по одной.

import logging import asyncio  q = asyncio.Queue()   async def a_difficult_task(some_arg):     print(f"task {some_arg} started")     await asyncio.sleep(120)     print(f"task {some_arg} ended")   async def worker():     while True:         try:             some_arg = await q.get()             await a_difficult_task(some_arg=some_arg)         except (KeyboardInterrupt, SystemExit, SystemError):             break         except Exception:             logging.exception("...")         finally:             q.task_done()   async def main():     asyncio.create_task(worker())     print("Adding tasks to queue")     for x in range(1, 7):         await q.put( x )     print("Tasks added to queue")     while True:         await asyncio.sleep(1)   if __name__ == "__main__":     asyncio.run(main())

import logging import asyncio q = asyncio.Queue() async def a_difficult_task(some_arg): print(f"task {some_arg} started") await asyncio.sleep(120) print(f"task {some_arg} ended") async def worker(): while True: try: some_arg = await q.get() await a_difficult_task(some_arg=some_arg) except (KeyboardInterrupt, SystemExit, SystemError): break except Exception: logging.exception("...") finally: q.task_done() async def main(): asyncio.create_task(worker()) print("Adding tasks to queue") for x in range(1, 7): await q.put( x ) print("Tasks added to queue") while True: await asyncio.sleep(1) if __name__ == "__main__": asyncio.run(main())

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для того чтобы разобраться в асинхронности и очередях в Python, вам рекомендуется изучить следующие материалы:

1. Документация Python: В первую очередь, стоит обратиться к официальной документации Python, где можно найти подробную информацию о модулях asyncio и queue. Это поможет вам понять основные принципы работы с асинхронностью и очередями в Python.

2. Книги: Существует множество книг по Python, посвященных асинхронному программированию. Некоторые из них, например "Async Python 3.7" или "Python Parallel Programming Cookbook", могут быть полезны для изучения данной темы.

3. Онлайн-курсы: Сейчас существует множество онлайн-курсов по Python, которые позволяют изучить асинхронное программирование и работу с очередями. Например, такие платформы как Coursera, Udemy или Codecademy предлагают курсы по асинхронному программированию.

4. Блоги и форумы: Часто на блогах и форумах программистов можно найти полезные статьи и обсуждения на тему асинхронности и очередей в Python. Рекомендуется почитать опыт других разработчиков и задать им вопросы, если что-то не понятно.

Надеюсь, что эти материалы помогут вам разобраться в асинхронности и очередях в Python. Удачи в изучении!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно