Skip to content

Hil-sys/arch3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Image B&W Converter: Producer-Consumer

О проекте

Учебный проект, разработанный в рамках дисциплины "Архитектуры компьютера и операционные системы".

Проект представляет собой клиент-серверное приложение на Python для конвертации изображений в черно-белый формат. Главная цель проекта — демонстрация работы архитектурного паттерна Producer-Consumer (Производитель-Потребитель) с использованием многопоточности и межпроцессного взаимодействия (IPC) через именованные каналы (Named Pipes) в среде Linux.

Особенности реализации

  • Паттерн Producer-Consumer: Основной поток сервера принимает запросы и помещает их в потокобезопасную очередь (Producer). Заданный пул рабочих потоков (Consumers) извлекает задачи из очереди и обрабатывает их параллельно.
  • Межпроцессное взаимодействие: Обмен данными реализован через механизмы ОС Linux — FIFO (именованные каналы, создаваемые в директории /tmp).
  • Асинхронные ответы: Для каждого запроса клиент создает свой уникальный канал для ответа, что позволяет избежать гонки данных между разными сессиями.
  • Обработка изображений: Конвертация RGB-пикселей в Grayscale осуществляется с помощью библиотеки Pillow.

Системные требования

  • ОС: Linux (проект использует специфичные для Unix системные вызовы, такие как os.mkfifo).
  • Python: Версия 3.6 или выше.
  • Зависимости: Pillow (PIL).

Установка и запуск

1. Установка зависимостей

Убедитесь, что у вас установлена необходимая библиотека для работы с графикой:

pip install Pillow

2. Запуск сервера

Сервер инициализирует главный канал связи и запускает пул рабочих потоков (воркеров).

python3 server.py [имя_канала] [-w КОЛИЧЕСТВО_ВОРКЕРОВ]

Параметры:

имя_канала (необязательно) — базовое имя для создания FIFO (по умолчанию: image_proc_channel).

-w, --workers (необязательно) — количество активных потоков для обработки изображений (по умолчанию: 3).

##Пример запуска сервера с 5 потоками:

python3 server.py my_channel -w 5

#Запуск клиента

python3 client.py [имя_канала]

##Как это работает (Архитектура)

Server: Создает общий request pipe (например, /tmp/image_proc_channel.req.pipe). Принимает строку вида путь_к_файлу:путь_к_каналу_ответа и кладет эту задачу в queue.Queue(). Воркеры забирают пути из очереди, конвертируют картинку (с искусственной задержкой для эмуляции тяжелой задачи) и отправляют статус завершения обратно.

Client: Читает ввод пользователя, генерирует уникальный response pipe (например, /tmp/resp_1234_1.pipe) и передает его серверу. После отправки задачи клиент блокируется в ожидании ответа из своего персонального канала, читает результат и удаляет временный канал.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages