Giter Site home page Giter Site logo

e-io / async-python-sprint-2 Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 1.14 MB

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

Python 7.67% HTML 87.30% CSS 0.50% JavaScript 4.52%

async-python-sprint-2's Introduction

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

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

Тому, кто будет это читать

Диаграмма

Взаимодействие компонентов изображено на этой диаграмме. image

Документация

Документация по этому проекту доступна благодаря использованию документатора MkDocs.

  • Документация доступна онлайн:

  • Также можно посмотреть офлайн:

    • как сайт - откройте site/index.html
    • как отдельные файлы markdown - смотрите папку docs/

Также сайт может генерироваться "на лету" при помощи команды

mkdocs serve  

Личные результаты достигнутые в ходе работы над этим проектом:

  • Впервые в жизни я писал тесты на каком-либо специальном фреймворке (pytest). До этого я только использовал py-тесты написанные другими.
  • Впервые я применил документатор. Я давно думал о том, как генерить файлы с docstring'ами, но не находил как это сделать.
  • А тут нашёл mkdocs и сгерировал статический сайт-документацию на github pages.

Теперь моя жизнь делится на 'до' и 'после'. Очень интересно мнение со стороны об этих двух пробах пера.

А также:

  • Впервые использовал корутины.
  • Впервые сделал бэкапы процессов, способные восстановиться хоть после перезапуска компьютера. В частности, впервые использовал функцию pickle.

Примечание

В текущем проекте я не успел реализовать опциональные параметры для классов Job и Schedule. Однако сделал все нужные заглушки, включая запись этих параметров в бэкап-файл и полное восстановление этих параметров при рестарте.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Схематично сервис представлен на диаграмме. image

async-python-sprint-2's People

Contributors

e-io avatar

Watchers

 avatar

async-python-sprint-2's Issues

TDD

Add tests to check some required funcs and classes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.