Skip to content

Проектная работа второго спринта курса «Асинхронное программирование на Python».

Notifications You must be signed in to change notification settings

KorsakovPV/async-python-sprint-2

Repository files navigation

Уважаемые студенты с яндекс-практикума. Если вы что-то для себя почерпнули из этой работы поставьте звезду, мне будет очень приятно. Не списывайте бездумно, попытайтесь понять код как будто вы ревьювер. Код с недостатками. :)

Проектное задание второго спринта

Спроектировать и реализовать планировщик задач для выполнения поступающих задач.

Описание задания

1. Описать реализацию класса Scheduler.

Условия и требования:

  • Планировщик одновременно может выполнять до 10 задач (дефолтное значение, может быть изменено).
  • Возможность добавить задачу в планировщик и запустить её в рамках ограничений планировщика и настроек, указанных в задаче.
  • При штатном завершение работы планировщик сохраняет статус выполняемых и ожидающих задач.
  • После рестарта восстанавливается последнее состояние и задачи продолжают выполняться.

2. Описать реализацию класса Job.

Условия и требования:

  • У задачи может быть указана длительность выполнения (опциональный параметр). Если параметр указан, то задача прекращает выполняться, если время выполнения превысило указанный параметр.
  • У задачи может быть указано время запуска (опциональный параметр). Если параметр указан, то задача стартует в указанный временный период.
  • У задачи может быть указан параметр количества рестартов (опциональный параметр). Если в ходе выполнения задачи произошёл сбой или задачи-зависимости не были выполнены, то задача будет перезапущена указанное количество раз. Если параметр не указан, то количество рестартов равно 0.
  • У задачи может быть указаны зависимости — задача или задачи, от которых зависит её выполнение (опциональный параметр). Если параметр указан, то задача не может стартовать до момента, пока не будут завершены задачи-зависимости.

3. Проверить работу планировщика на различных задачах.

Условия и требования:

  • работа с файловой системой: создание, удаление, изменение директорий и файлов;
  • работа с файлами: создание, чтение, запись;
  • работа с сетью: обработка ссылок (GET-запросы) и анализ полученного результата;
  • описать конвеер выполнения основной задачи минимум из 3 задач, зависящих друг от друга и выполняющихся последовательно друг за другом.

Требования к решению

  1. Используйте корутины и генераторы при решении. Использование потоков и процессов не запрещено.
  2. Используйте встроенные библиотеки и модули языка.
  3. Используйте концепции ООП.
  4. Используйте аннотацию типов.
  5. Логируйте результаты действий.
  6. Покройте написанный код тестами.
  7. Предусмотрите обработку исключительных ситуаций.
  8. Приведите стиль кода в соответствие pep8, flake8, mypy.

Рекомендации к решению

  1. Для хранения статуса задач или планировщика используйте .lock-файлы и иные текстовые форматы — например, txt или json.
  2. Организуйте структуру хранения задач и/или их зависимостей в рамках отдельных директорий с определенным наименованием, используя uid или кастомный шаблон. Использование ссылок (symlink) не запрещено.
  3. Сигнатура описания классов может быть изменена под ваше усмотрение. Создавать дополнительные классы не запрещено.
  4. Используйте примитивы синхронизации, например, Timer или Condition.
  5. По возможности, решение должно полностью строиться на использовании корутин.

About

Проектная работа второго спринта курса «Асинхронное программирование на Python».

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages