Клиент-серверное приложение. Сервер. Занимается приемом и выполнением задач. Выполнение задач производится строго по очереди и по одной за раз, последовательно. Обработка клиентских запросов и выполнение задач должны производиться параллельно. Предоставляет следующий интерфейс:
- Получает тип задачи и данные и добавляет задачу в очередь на исполнение. Возвращает идентификатор задачи.
- По идентификатору возвращает статус задачи (например: в очереди, выполняется, завершено)
- По идентификатору возвращает результат выполнения задачи (предусмотреть что за результатом могут обратиться несколько раз).
Хранение задач (идентификаторов, данных и результатов) между запусками сервера не требуется.
Список задач (тип) предопределен, для имитации длительности задачи добавить указанную задержку во время ее выполнения:
- Выполнить разворот строки. (пример -> ремирп). Задержка 2 сек.
- Выполнить попарно перестановку четных и нечетных символов в строке ( пример -> рпмире, кот -> окт). Задержка 5 сек.
- Выполнить повтор символа в строке согласно его позиции (пример -> прриииммммееееерррррр). Задержка 7 сек.
Клиент. Служит для выполнения запросов к серверу (рекомендуется использовать параметры командной строки). Должен уметь:
- Передать данные и тип задачи на сервер, отобразить идентификатор.
- Запросить и вывести статус задачи по идентификатору.
- Запросить и вывести результат выполнения задачи по идентификатору.
- Возможность запуска в режиме (пакетный), когда клиент, получив тип задачи и данные:
- отдает задачу на выполнение и выводит идентификатор
- дожидается выполнения задачи (в ходе ожидания можно выводить текущий статус)
- запрашивает и выводит результат выполнения задачи.
- может прервать ожидание по ctrl+c
Протокол клиент-серверного взаимодействия на усмотрение разработчика. Библиотеки и фреймворки на усмотрение разработчика, но предпочтительно использовать встроенные средства питона. Версия питона (cpython) и ОС на усмотрение разработчика.
Для запуска сервера можно воспользоваться командой :
$ python3 run_server.py
Остановка по команде с клавиатуры ^c.
Взаимодействие с сервером может осуществляться через клиент client.py.
Аргументы:
--action, -a- запрашиваемое у сервера действие. Возможны следующие варианты:run- запустить задачуresult- запросить результатstatus- запросить статус
--data, -d- в зависимости от действия может быть id задачи (при -a [result, status]) либо произвольная строка.-task_name, -n- имя задачи для запуска на сервере (при -a run) (1 - reverse, 2 - permutation, 3 - repeat)--waiting_for_data, -w- ожидания результата выполнения задачи
Пример запуска задачи:
$ python3 client.py -a run -n 1 -d пример -w true
Result of task [1]: ремирп
Status: success
$ python3 client.py -a run -n 1 -d пример
Task [1] added to the queue. Task id is #1
$ python3 client.py -a status -d 1
Status of task #1: success
$ python3 client.py -a result -d 1
Result of task #1: ремирп
Status: success