|
| 1 | +# Домашнее задание #06 (потоки, процессы) |
| 2 | + |
| 3 | +### 1. Клиент-серверное приложение для обкачки набора урлов с ограничением нагрузки |
| 4 | +#### Cервер |
| 5 | +master-worker cервер для обработки запросов от клиента. |
| 6 | + |
| 7 | +Алгоритм должен быть следующим: |
| 8 | + |
| 9 | + - Сервер должен поддерживать взаимодействие с любым числом клиентов; |
| 10 | + - Мастер и воркеры это разные потоки в едином приложении сервера; |
| 11 | + - Количество воркеров задается при запуске; |
| 12 | + - Мастер слушает порт, на который клиенты будут по TCP отправлять урлы для обкачки; |
| 13 | + - Мастер принимает запроc и передает его одному из воркеров; |
| 14 | + - Воркер читает url от клиента; |
| 15 | + - Воркер обкачивает url по http и возвращает клиенту топ K самых частых слов и их частоту в формате json {"word1": 10, "word2": 5}; |
| 16 | + - После каждого обработанного урла сервер должен вывести статистику: сколько урлов было обработано на данный момент суммарно всеми воркерами; |
| 17 | + |
| 18 | +`python server.py -w 10 -k 7` (сервер использует 10 воркеров для обкачки и отправляет клиенту топ-7 частых слов) |
| 19 | + |
| 20 | +Все действия должны быть выделены в классы/функции. |
| 21 | + |
| 22 | +#### Клиент |
| 23 | +Утилита, отправляющая запросы с урлами серверу по TCP в несколько потоков. |
| 24 | +Нужно сделать следующее: |
| 25 | + |
| 26 | + - Подготовить файл с запросами (порядка 100 разных url); |
| 27 | + - На вход клиенту передаётся два аргумента --- файл с URL'ами и количество потоков M; |
| 28 | + - Клиент создает M потоков, отправляет запросы на сервер в каждом потоке и печатает ответ сервера в стандартый вывод, например: `xxx.com: {'word1': 100, 'word2': 50}`. |
| 29 | + |
| 30 | +`python client.py 10 urls.txt` |
| 31 | + |
| 32 | + |
| 33 | +Все действия должны быть выделены в классы/функции. |
| 34 | + |
| 35 | +### 2. Тесты для клиента и для сервера |
| 36 | + |
| 37 | +### 3. Зеленый пайплайн в репе |
| 38 | +Обязательно: тесты, покрытие, flake8, pylint. |
| 39 | +Опционально можно добавить другие инструменты, например, mypy и black. |
| 40 | +Покрытие тестов должно составлять не менее 90%. |
0 commit comments