Skip to content

Commit 996a867

Browse files
author
Gennadii Kandaurov
committed
add lesson #06 slides, hw
1 parent db10da5 commit 996a867

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
03. [Классы, ООП](lesson-03)
88
04. [Дескрипторы, метапрограммирование, ABC](lesson-04)
99
05. [Метаклассы, стандартная библиотека](lesson-05)
10+
06. [Потоки, процессы, IPC](lesson-06)
1011

1112

1213
## Правила оформления домашек на github

lesson-06/homework.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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%.

lesson-06/lesson-06.pdf

817 KB
Binary file not shown.

0 commit comments

Comments
 (0)