Compare commits
No commits in common. "0887bc1d9809d045a3f8835e5bac6bfe0ab28db7" and "5dbc6a294b603441e7a4b605cde5ec9bf7f404f5" have entirely different histories.
0887bc1d98
...
5dbc6a294b
@ -1,2 +0,0 @@
|
|||||||
result
|
|
||||||
data
|
|
@ -1,38 +0,0 @@
|
|||||||
# Лабораторная работа №2 - Разработка простейшего распределённого приложения
|
|
||||||
|
|
||||||
## Задание
|
|
||||||
Разработать два приложения такие, что результат первого является исходными данными для второго.
|
|
||||||
Собрать файл `docker-compose.yml` для запуска приложений. Изучить файлы сборки образов Docker и создать их для разработанных приложений, корректно закоммитить решение.
|
|
||||||
|
|
||||||
## Варианты задания
|
|
||||||
1. **worker-1** - Формирует файл `/var/result/data.txt` из первых строк всех файлов каталога
|
|
||||||
2. **worker-2** - Ищет набольшее число из файла `/var/data/data.txt` и сохраняет его вторую степень в `/var/result/result.txt`.
|
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
## Запуск работы
|
|
||||||
|
|
||||||
1. Убедиться, что установлены необходимые технологии:
|
|
||||||
- Docker: Платформа для контейнеризации приложений.
|
|
||||||
- Docker Compose: Инструмент для запуска многоконтейнерных приложений на основе `docker-compose.yaml`. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду:
|
|
||||||
```bash
|
|
||||||
docker-compose --version
|
|
||||||
```
|
|
||||||
|
|
||||||
2. В директории, где находится файл `docker-compose.yaml`, выполнить следующую команду для запуска всех сервисов:
|
|
||||||
```bash
|
|
||||||
docker-compose up --build
|
|
||||||
```
|
|
||||||
Эта команда сначала выполнит сборку, а затем запустит контейнеры.
|
|
||||||
|
|
||||||
3. После успешного запуска можно перейти в каталог проекта и увидеть папку data со сгенерированными файлами и папку result, в которой два текстовых файла:
|
|
||||||
- data.txt - файл, полученный после выполнения первой программы.
|
|
||||||
- result.txt -файл, полученный после выполнения второй программы.
|
|
||||||
|
|
||||||
## Описание работы:
|
|
||||||
|
|
||||||
Для разработки приложений был выбран язык программирования - ```python```
|
|
||||||
Построчное описание docker-compose.yaml и других файлов выполнено в самих файлах.
|
|
||||||
|
|
||||||
## [Видео](https://disk.yandex.ru/i/IRM2gmjud4hj9w)
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
490
|
|
||||||
198
|
|
||||||
76
|
|
||||||
550
|
|
@ -1,42 +0,0 @@
|
|||||||
233
|
|
||||||
92
|
|
||||||
225
|
|
||||||
823
|
|
||||||
302
|
|
||||||
606
|
|
||||||
564
|
|
||||||
980
|
|
||||||
312
|
|
||||||
744
|
|
||||||
10
|
|
||||||
261
|
|
||||||
808
|
|
||||||
364
|
|
||||||
642
|
|
||||||
712
|
|
||||||
815
|
|
||||||
250
|
|
||||||
547
|
|
||||||
147
|
|
||||||
708
|
|
||||||
166
|
|
||||||
228
|
|
||||||
678
|
|
||||||
831
|
|
||||||
521
|
|
||||||
314
|
|
||||||
764
|
|
||||||
230
|
|
||||||
547
|
|
||||||
85
|
|
||||||
611
|
|
||||||
139
|
|
||||||
707
|
|
||||||
743
|
|
||||||
761
|
|
||||||
168
|
|
||||||
166
|
|
||||||
229
|
|
||||||
315
|
|
||||||
765
|
|
||||||
356
|
|
@ -1,89 +0,0 @@
|
|||||||
711
|
|
||||||
154
|
|
||||||
141
|
|
||||||
610
|
|
||||||
133
|
|
||||||
704
|
|
||||||
335
|
|
||||||
429
|
|
||||||
743
|
|
||||||
77
|
|
||||||
843
|
|
||||||
329
|
|
||||||
805
|
|
||||||
536
|
|
||||||
303
|
|
||||||
927
|
|
||||||
392
|
|
||||||
640
|
|
||||||
947
|
|
||||||
488
|
|
||||||
664
|
|
||||||
716
|
|
||||||
815
|
|
||||||
611
|
|
||||||
338
|
|
||||||
686
|
|
||||||
212
|
|
||||||
512
|
|
||||||
896
|
|
||||||
450
|
|
||||||
378
|
|
||||||
752
|
|
||||||
48
|
|
||||||
910
|
|
||||||
240
|
|
||||||
514
|
|
||||||
513
|
|
||||||
933
|
|
||||||
266
|
|
||||||
465
|
|
||||||
949
|
|
||||||
362
|
|
||||||
496
|
|
||||||
646
|
|
||||||
359
|
|
||||||
638
|
|
||||||
938
|
|
||||||
255
|
|
||||||
17
|
|
||||||
339
|
|
||||||
598
|
|
||||||
343
|
|
||||||
148
|
|
||||||
896
|
|
||||||
16
|
|
||||||
151
|
|
||||||
954
|
|
||||||
530
|
|
||||||
920
|
|
||||||
954
|
|
||||||
70
|
|
||||||
734
|
|
||||||
596
|
|
||||||
632
|
|
||||||
549
|
|
||||||
628
|
|
||||||
514
|
|
||||||
311
|
|
||||||
685
|
|
||||||
496
|
|
||||||
735
|
|
||||||
21
|
|
||||||
756
|
|
||||||
132
|
|
||||||
830
|
|
||||||
620
|
|
||||||
779
|
|
||||||
447
|
|
||||||
701
|
|
||||||
222
|
|
||||||
553
|
|
||||||
857
|
|
||||||
742
|
|
||||||
79
|
|
||||||
852
|
|
||||||
453
|
|
||||||
481
|
|
||||||
3
|
|
||||||
412
|
|
@ -1,14 +0,0 @@
|
|||||||
# Используем базовый образ Python
|
|
||||||
FROM python:3.9-slim
|
|
||||||
|
|
||||||
# Устанавливаем рабочую директорию
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Копируем скрипт генератора
|
|
||||||
COPY generate_data.py .
|
|
||||||
|
|
||||||
# Устанавливаем переменную среды для указания пути к файлу
|
|
||||||
ENV DATA_PATH=/var/data
|
|
||||||
|
|
||||||
# Запуск скрипта генерации данных
|
|
||||||
CMD ["python", "generate_data.py"]
|
|
@ -1,34 +0,0 @@
|
|||||||
import os
|
|
||||||
import random
|
|
||||||
|
|
||||||
# Директория для генерации файлов
|
|
||||||
output_dir = '/var/data'
|
|
||||||
os.makedirs(output_dir, exist_ok=True)
|
|
||||||
|
|
||||||
# Генерируем случайное количество файлов (1-15)
|
|
||||||
num_files = random.randint(1, 15)
|
|
||||||
|
|
||||||
# Функция для генерации случайного файла
|
|
||||||
def generate_random_file(filename):
|
|
||||||
num_lines = random.randint(1, 100)
|
|
||||||
with open(filename, 'w') as f:
|
|
||||||
for _ in range(num_lines):
|
|
||||||
random_number = random.randint(0, 1000)
|
|
||||||
f.write(f"{random_number}\n")
|
|
||||||
|
|
||||||
# Генерация нескольких случайных файлов
|
|
||||||
for i in range(num_files):
|
|
||||||
filename = os.path.join(output_dir, f'random_file_{i + 1}.txt')
|
|
||||||
generate_random_file(filename)
|
|
||||||
print(f"Генерация файла {filename} завершена.")
|
|
||||||
|
|
||||||
# Дополнительно создаём файл data.txt со случайными числами
|
|
||||||
data_file = os.path.join(output_dir, 'data.txt')
|
|
||||||
with open(data_file, 'w') as f:
|
|
||||||
num_lines = random.randint(1, 100)
|
|
||||||
for _ in range(num_lines):
|
|
||||||
random_number = random.randint(0, 1000)
|
|
||||||
f.write(f"{random_number}\n")
|
|
||||||
|
|
||||||
print(f"Файл {data_file} успешно сгенерирован с {num_lines} строками.")
|
|
||||||
print(f"Общее количество сгенерированных файлов: {num_files + 1}")
|
|
@ -1,28 +0,0 @@
|
|||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
|
||||||
data-generator:
|
|
||||||
build: ./data_generator
|
|
||||||
volumes:
|
|
||||||
- ./data:/var/data
|
|
||||||
command: ["python", "generate_data.py"]
|
|
||||||
|
|
||||||
worker1:
|
|
||||||
build: ./worker-1
|
|
||||||
volumes:
|
|
||||||
- ./data:/var/data
|
|
||||||
- ./result:/var/result
|
|
||||||
depends_on:
|
|
||||||
- data-generator
|
|
||||||
|
|
||||||
worker2:
|
|
||||||
build: ./worker-2
|
|
||||||
volumes:
|
|
||||||
- ./data:/var/data
|
|
||||||
- ./result:/var/result
|
|
||||||
depends_on:
|
|
||||||
- worker1
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
data:
|
|
||||||
result:
|
|
@ -1,3 +0,0 @@
|
|||||||
490
|
|
||||||
233
|
|
||||||
711
|
|
@ -1 +0,0 @@
|
|||||||
302500
|
|
@ -1,11 +0,0 @@
|
|||||||
# Используем образ Python
|
|
||||||
FROM python:3.9-slim
|
|
||||||
|
|
||||||
# Создаем рабочий каталог
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Копируем скрипт в контейнер
|
|
||||||
COPY main.py .
|
|
||||||
|
|
||||||
# Команда для запуска программы
|
|
||||||
CMD ["python", "main.py"]
|
|
@ -1,16 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
input_dir = '/var/data'
|
|
||||||
output_file = '/var/result/data.txt'
|
|
||||||
|
|
||||||
def get_first_line_from_files(input_directory, output_path):
|
|
||||||
with open(output_path, 'w') as outfile:
|
|
||||||
for filename in os.listdir(input_directory):
|
|
||||||
file_path = os.path.join(input_directory, filename)
|
|
||||||
if os.path.isfile(file_path):
|
|
||||||
with open(file_path, 'r') as infile:
|
|
||||||
first_line = infile.readline().strip()
|
|
||||||
outfile.write(first_line + '\n')
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
get_first_line_from_files(input_dir, output_file)
|
|
@ -1,11 +0,0 @@
|
|||||||
# Используем образ Python
|
|
||||||
FROM python:3.9-slim
|
|
||||||
|
|
||||||
# Создаем рабочий каталог
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Копируем скрипт в контейнер
|
|
||||||
COPY main.py .
|
|
||||||
|
|
||||||
# Команда для запуска программы
|
|
||||||
CMD ["python", "main.py"]
|
|
@ -1,14 +0,0 @@
|
|||||||
input_file = '/var/data/data.txt'
|
|
||||||
output_file = '/var/result/result.txt'
|
|
||||||
|
|
||||||
def find_square_of_max(input_path, output_path):
|
|
||||||
with open(input_path, 'r') as infile:
|
|
||||||
numbers = [int(line.strip()) for line in infile if line.strip().isdigit()]
|
|
||||||
if numbers:
|
|
||||||
max_number = max(numbers)
|
|
||||||
square_of_max = max_number ** 2
|
|
||||||
with open(output_path, 'w') as outfile:
|
|
||||||
outfile.write(str(square_of_max))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
find_square_of_max(input_file, output_file)
|
|
Loading…
Reference in New Issue
Block a user