|
| 1 | +# Проектное задание второго спринта |
| 2 | + |
| 3 | +Спроектировать и реализовать планировщик задач для выполнения поступающих задач. |
| 4 | + |
| 5 | +## Описание задания |
| 6 | + |
| 7 | +**1. Описать реализацию класса `Scheduler`.** |
| 8 | + |
| 9 | +Условия и требования: |
| 10 | +- Планировщик одновременно может выполнять до 10 задач (дефолтное значение, может быть изменено). |
| 11 | +- Возможность добавить задачу в планировщик и запустить её в рамках ограничений планировщика и настроек, указанных в задаче. |
| 12 | +- При штатном завершении работы планировщик сохраняет статус выполняемых и ожидающих задач. |
| 13 | +- После рестарта восстанавливается последнее состояние и задачи продолжают выполняться. |
| 14 | + |
| 15 | +**2. Описать реализацию класса `Job`.** |
| 16 | + |
| 17 | +Условия и требования: |
| 18 | +- У задачи может быть указана длительность выполнения (опциональный параметр). Если параметр указан, то задача прекращает выполняться, если время выполнения превысило указанный параметр. |
| 19 | +- У задачи может быть указано время запуска (опциональный параметр). Если параметр указан, то задача стартует в указанный временной период. |
| 20 | +- У задачи может быть указан параметр количества рестартов (опциональный параметр). Если в ходе выполнения задачи произошёл сбой или задачи-зависимости не были выполнены, то задача будет перезапущена указанное количество раз. Если параметр не указан, то количество рестартов равно 0. |
| 21 | +- У задачи может быть указаны зависимости — задача или задачи, от которых зависит её выполнение (опциональный параметр). Если параметр указан, то задача не может стартовать до момента, пока не будут завершены задачи-зависимости. |
| 22 | + |
| 23 | + |
| 24 | +**3. Проверить работу планировщика на различных задачах.** |
| 25 | + |
| 26 | +Условия и требования: |
| 27 | +- работа с файловой системой: создание, удаление, изменение директорий и файлов; |
| 28 | +- работа с файлами: создание, чтение, запись; |
| 29 | +- работа с сетью: обработка ссылок (GET-запросы) и анализ полученного результата; |
| 30 | +- описать конвеер выполнения основной задачи минимум из 3 задач, зависящих друг от друга и выполняющихся последовательно друг за другом. |
| 31 | + |
| 32 | +## Требования к решению |
| 33 | + |
| 34 | +1. Используйте корутины и генераторы, изученные в теоретической части. |
| 35 | +2. Использование потоков и процессов не запрещено. |
| 36 | +3. Использование `asyncio` запрещено. |
| 37 | +4. Используйте встроенные библиотеки и модули языка. |
| 38 | +5. Используйте концепции ООП. |
| 39 | +6. Используйте аннотацию типов. |
| 40 | +7. Логируйте результаты действий. |
| 41 | +8. Предусмотрите обработку исключительных ситуаций. |
| 42 | +9. Приведите стиль кода в соответствие pep8, flake8, mypy. |
| 43 | + |
| 44 | +## Рекомендации к решению |
| 45 | + |
| 46 | +1. Покройте написанный код тестами. |
| 47 | +2. Для хранения статуса задач или планировщика используйте `.lock`-файлы и иные текстовые форматы — например, `txt` или `json`. |
| 48 | +3. Организуйте структуру хранения задач и/или их зависимостей в рамках отдельных директорий с определенным наименованием, используя `uid` или кастомный шаблон. Использование ссылок (`symlink`) не запрещено. |
| 49 | +4. Сигнатура описания классов может быть изменена под ваше усмотрение. Создавать дополнительные классы не запрещено. |
| 50 | +5. Используйте примитивы синхронизации, например, [Timer](https://docs.python.org/3/library/threading.html#timer-objects) или [Condition](https://docs.python.org/3/library/threading.html#condition-objects). |
| 51 | +6. По возможности, решение должно полностью строиться на использовании корутин. |
| 52 | + |
| 53 | +Схематично сервис представлен на [диаграмме](schema.png){target="_blank"}. |
| 54 | + |
0 commit comments