Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Веб-сервис по организации очереди задач на FastAPI

Функционал:

  • Есть возможность создать задачу. Она автоматически поставится в очередь на расчет.
  • Пожно получить информацию о задаче.
  • В процессе обработки задача меняет свой статус, также заполняются поля с временем начала расчета и общим временем, потраченным на выполнение.
  • Выполнение задачи - запуск простой функции, которая усыпляет процесс на случайное количество секунд.

Запуск:

pip install -r requirements.txt

Затем запускаем наш сервер, который запуститься на localhost:8000

uvicorn main:app --reload

Endpoints:

  • /add_task
  • /task_status/{task_id}

Про реализацию

  • В данном работе, было создано веб-приложение по организации очереди задач, в условиях было сказано не использовать framework'и для реализации очередей задач(Celery, Dramatiq, etc), я не до конца понял этот момент, потому что для выполнения задач и добавления их в threadpool приложения я использовал FastAPI BackgroundTasks, по логике это удовлетворят условию, учитывая, что они используют starlette, BackgorundTask, который работает по простому принципу, добавляя задачи в список и по методу FIFO достают от туда задачи, добавляя их в threadpool.
  • Работу с задачами была организовано виде асинхронного симафора, который позволяет выполнять 2 задачи одновременно
  • Использовал SQLite, потому что не хотел все это оборачивать в docker и поднимать docker-compose
  • Написал unit-тесты для проверки корректности работы
  • Не стал использовать ORM, по двум причинам:
    1. Демонстрация навыка писать чистые SQL запросы по скольку это бывает нужно на нагруженных сервисах
    2. Посчитал, что использование SQLAlchemy будет тут излишне, ибо запросы простые
  • Использовал асинхронное подключение к БД, поскольку это i/o-bound задача, и так будет корректнее демонстрация работы

Спасибо, за уделенное время

$\textcopyright$ Воронов Игорь Сергеевич

About

Очередь задач на FastAPI: асинхронная обработка, ограничение параллелизма через семафор, SQLite

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages