tsukanova_irina_lab_2 #32

Merged
Alexey merged 4 commits from tsukanova_irina_lab_2 into main 2024-09-30 22:18:29 +04:00
12 changed files with 109 additions and 0 deletions

2
tsukanova_irina_lab_2/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/.venv
/.idea

View File

@ -0,0 +1,16 @@
# Цуканова Ирина ПИбд-32
# Лабораторная работа №2 - Разработка простейшего распределённого приложения
### Язык разработки приложений: Python
## Выбранные варианты
- Для программы 1: Ищет в каталоге ```/var/data``` самый большой по объёму файл и перекладывает его в ```/var/result/data.txt```.
- Для программы 2: Сохраняет произведение первого и последнего числа из файла ```/var/result/data.txt``` в ```/var/result/result.txt```.
## Описание:
Каждая программа лежит в своей папке, первая в worker-1, вторая в worker-2.
В этих же папках лежат Dockerfile'ы с инструкциями по сборке. В них присутствуют комментарии для значимых строк.
Монтированные папки ```data``` для ```/var/data``` и ```result``` для ```/var/result```.
## [Видео](https://drive.google.com/file/d/1eBbIDgTo3MF4EeM677EPEKgJEINekaC0/view?usp=drive_link)

View File

@ -0,0 +1 @@
34 905 63 92 74 9 3 25 8 0 2 4 24 452 94 6 2 4 2 65 83 73 672 47 23 21 1

View File

@ -0,0 +1 @@
4 9 6 320 75 348 12 75 94 63 45 23 3

View File

@ -0,0 +1 @@
5 34 7 9 6 43 5 768 4 23 1 3 657 534 4 3 87 6 9 8 56 37 525 5 7 3 2 65 4 86 7 295 473 254 633 4 45 2

View File

@ -0,0 +1,18 @@
services:
worker_one:
container_name: worker_one
build:
dockerfile: ./worker-1
volumes:
- ./data:/var/data
- ./result:/var/result
worker_two:
container_name: worker_two
build:
dockerfile: ./worker-2
volumes:
- ./result:/var/result
depends_on:
- worker_one

View File

@ -0,0 +1 @@
5 34 7 9 6 43 5 768 4 23 1 3 657 534 4 3 87 6 9 8 56 37 525 5 7 3 2 65 4 86 7 295 473 254 633 4 45 2

View File

@ -0,0 +1 @@
10

View File

@ -0,0 +1,11 @@
# Использую базовый образ Python
FROM python:3.12-slim
# Устанавливаю рабочую директорию внутри контейнера
WORKDIR /app
# Копирую все файлы в контейнер
COPY worker_1.py .
# Команда для запуска Python-скрипта
CMD ["python", "worker_1.py"]

View File

@ -0,0 +1,27 @@
import os
import shutil
# Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
print("start worker_1")
dir_data = "/var/data"
dir_res = "/var/result"
if not os.path.exists(dir_data):
os.mkdir(dir_data)
if not os.path.exists(dir_res):
os.mkdir(dir_res)
largest_file = None
largest_size = 0
for root, dirs, files in os.walk(dir_data):
for file in files:
file_path = os.path.join(root, file)
file_size = os.path.getsize(file_path)
if file_size > largest_size:
largest_size = file_size
largest_file = file_path
if largest_file:
shutil.copyfile(largest_file, dir_res + "/data.txt")

View File

@ -0,0 +1,11 @@
# Использую базовый образ Python
FROM python:3.12-slim
# Устанавливаю рабочую директорию внутри контейнера
WORKDIR /app
# Копирую все файлы в контейнер
COPY worker_2.py .
# Команда для запуска Python-скрипта
CMD ["python", "worker_2.py"]

View File

@ -0,0 +1,19 @@
# Сохраняет произведение первого и последнего числа из файла /var/result/data.txt в /var/result/result.txt.
print("start worker_2")
with open('/var/result/data.txt', 'r') as f:
numbers = [int(num) for num in f.read().split() if num.isdigit()]
if numbers:
first_number = numbers[0]
last_number = numbers[-1]
result = first_number * last_number
with open('/var/result/result.txt', 'w') as f:
f.write(f"{result}\n")
print(f"Получен результат - {result}")
else:
print("Результат не получен. Файл не содержит чисел")