klyushenkova_ksenia_lab_2 is ready

This commit is contained in:
Pineapple 2024-12-20 00:24:54 +04:00
parent 5dd9e26f07
commit ede7e1c685
14 changed files with 149 additions and 0 deletions

2
klyushenkova_ksenia_lab_2/.gitignore vendored Normal file
View File

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

View File

@ -0,0 +1,15 @@
# Клюшенкова Ксения ПИбд-42
# Лабораторная работа №2 - Разработка простейшего распределённого приложения
### Язык разработки приложений: Python
## Варианты
- Программа 1: Ищет в каталоге ```/var/data``` самый большой по объёму файл и перекладывает его в ```/var/result/data.txt```.
- Программа 2: Сохраняет произведение первого и последнего числа из файла ```/var/result/data.txt``` в ```/var/result/result.txt```.
## Описание:
Первая программа лежит в папке w-1, вторая в папке w-2. В каждой папке также есть DockerFile, содержащие в себе
инструкции по сборке. В них присутствуют комментарии для значимых строк. Монтированные папки ```data``` для ```/var/data``` и ```result``` для ```/var/result```.
## [Видео](https://disk.yandex.ru/i/es7vPXJMiW5Rlg)

View File

@ -0,0 +1 @@
3 7 12 18 25 3 7 12 18 25

View File

@ -0,0 +1 @@
10 20 30 40 50

View File

@ -0,0 +1 @@
5 15 30 50 75

View File

@ -0,0 +1 @@
-4 -2 0 2 4

View File

@ -0,0 +1 @@
100 95 90 85 80

View File

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

View File

@ -0,0 +1 @@
3 7 12 18 25 3 7 12 18 25

View File

@ -0,0 +1 @@
625.0

View File

@ -0,0 +1,7 @@
FROM python:3.12-slim
WORKDIR /app
COPY worker-1.py .
CMD ["python", "worker-1.py"]

View File

@ -0,0 +1,44 @@
import os
import shutil
# Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
# Определяем пути
source_dir = '/var/data'
target_file = '/var/result/data.txt'
def find_largest_file(directory):
largest_file = None
max_size = 0
# Перебираем все файлы в каталоге
for root, _, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
try:
size = os.path.getsize(file_path)
if size > max_size:
max_size = size
largest_file = file_path
except OSError as e:
print(f"Ошибка при обработке файла {file_path}: {e}")
return largest_file
def move_largest_file_to_target(source_dir, target_file):
largest_file = find_largest_file(source_dir)
if not largest_file:
print("В каталоге нет файлов.")
return
try:
# Создаём директорию для файла, если она не существует
os.makedirs(os.path.dirname(target_file), exist_ok=True)
# Перемещаем содержимое самого большого файла
shutil.copyfile(largest_file, target_file)
print(f"Самый большой файл {largest_file} был перемещён в {target_file}.")
except OSError as e:
print(f"Ошибка при перемещении файла: {e}")
move_largest_file_to_target(source_dir, target_file)

View File

@ -0,0 +1,7 @@
FROM python:3.12-slim
WORKDIR /app
COPY worker-2.py .
CMD ["python", "worker-2.py"]

View File

@ -0,0 +1,49 @@
import os
# Ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt.
# Пути к файлам
input_file = '/var/result/data.txt'
output_file = '/var/result/result.txt'
def find_largest_number_and_save_squared(input_file, output_file):
try:
# Проверяем существование входного файла
if not os.path.exists(input_file):
print(f"Файл {input_file} не найден.")
return
# Чтение чисел из файла
with open(input_file, 'r') as file:
numbers = []
for line in file:
for word in line.split():
try:
numbers.append(float(word))
except ValueError:
continue
# Проверяем, что числа найдены
if not numbers:
print("В файле нет чисел.")
return
# Находим наибольшее число
largest_number = max(numbers)
# Вычисляем квадрат
squared_number = largest_number ** 2
# Создаём директорию для файла, если её нет
os.makedirs(os.path.dirname(output_file), exist_ok=True)
# Записываем квадрат в файл
with open(output_file, 'w') as file:
file.write(str(squared_number))
print(f"Наибольшее число: {largest_number}")
print(f"Квадрат числа сохранён в {output_file}")
except Exception as e:
print(f"Ошибка: {e}")
find_largest_number_and_save_squared(input_file, output_file)