- Есть возможность создать задачу. Она автоматически поставится в очередь на расчет.
- Пожно получить информацию о задаче.
- В процессе обработки задача меняет свой статус, также заполняются поля с временем начала расчета и общим временем, потраченным на выполнение.
- Выполнение задачи - запуск простой функции, которая усыпляет процесс на случайное количество секунд.
pip install -r requirements.txtЗатем запускаем наш сервер, который запуститься на localhost:8000
uvicorn main:app --reload/add_task/task_status/{task_id}
- В данном работе, было создано веб-приложение по организации очереди задач, в условиях было сказано не использовать framework'и для реализации очередей задач(Celery, Dramatiq, etc), я не до конца понял этот момент, потому что для выполнения задач и добавления их в threadpool приложения я использовал FastAPI BackgroundTasks, по логике это удовлетворят условию, учитывая, что они используют starlette, BackgorundTask, который работает по простому принципу, добавляя задачи в список и по методу FIFO достают от туда задачи, добавляя их в threadpool.
- Работу с задачами была организовано виде асинхронного симафора, который позволяет выполнять 2 задачи одновременно
- Использовал SQLite, потому что не хотел все это оборачивать в docker и поднимать docker-compose
- Написал unit-тесты для проверки корректности работы
- Не стал использовать ORM, по двум причинам:
- Демонстрация навыка писать чистые SQL запросы по скольку это бывает нужно на нагруженных сервисах
- Посчитал, что использование SQLAlchemy будет тут излишне, ибо запросы простые
- Использовал асинхронное подключение к БД, поскольку это i/o-bound задача, и так будет корректнее демонстрация работы