klyushenkova_ksenia_lab_2 is ready
This commit is contained in:
parent
5dd9e26f07
commit
ede7e1c685
2
klyushenkova_ksenia_lab_2/.gitignore
vendored
Normal file
2
klyushenkova_ksenia_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/.venv
|
||||||
|
/.idea
|
15
klyushenkova_ksenia_lab_2/README.md
Normal file
15
klyushenkova_ksenia_lab_2/README.md
Normal 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)
|
1
klyushenkova_ksenia_lab_2/data/1.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/1.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
3 7 12 18 25 3 7 12 18 25
|
1
klyushenkova_ksenia_lab_2/data/2.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/2.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
10 20 30 40 50
|
1
klyushenkova_ksenia_lab_2/data/3.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/3.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
5 15 30 50 75
|
1
klyushenkova_ksenia_lab_2/data/4.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/4.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
-4 -2 0 2 4
|
1
klyushenkova_ksenia_lab_2/data/5.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/5.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
100 95 90 85 80
|
18
klyushenkova_ksenia_lab_2/docker-compose.yaml
Normal file
18
klyushenkova_ksenia_lab_2/docker-compose.yaml
Normal 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
|
1
klyushenkova_ksenia_lab_2/result/data.txt
Normal file
1
klyushenkova_ksenia_lab_2/result/data.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
3 7 12 18 25 3 7 12 18 25
|
1
klyushenkova_ksenia_lab_2/result/result.txt
Normal file
1
klyushenkova_ksenia_lab_2/result/result.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
625.0
|
7
klyushenkova_ksenia_lab_2/w-1/Dockerfile
Normal file
7
klyushenkova_ksenia_lab_2/w-1/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY worker-1.py .
|
||||||
|
|
||||||
|
CMD ["python", "worker-1.py"]
|
44
klyushenkova_ksenia_lab_2/w-1/worker-1.py
Normal file
44
klyushenkova_ksenia_lab_2/w-1/worker-1.py
Normal 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)
|
7
klyushenkova_ksenia_lab_2/w-2/Dockerfile
Normal file
7
klyushenkova_ksenia_lab_2/w-2/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY worker-2.py .
|
||||||
|
|
||||||
|
CMD ["python", "worker-2.py"]
|
49
klyushenkova_ksenia_lab_2/w-2/worker-2.py
Normal file
49
klyushenkova_ksenia_lab_2/w-2/worker-2.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user