Распределение вычислительной мощности между несколькими ПК

—

от автора

В ходе работы возникла задача обработки огромного объема (~500 Гб) аудиозаписей в условиях ограниченного времени. На одном ПК обработка заняла бы не менее месяца, что не вписывалось в установленные заказчиком сроки. Возникла идея подключения компьютеров коллег, у которых ночью ПК «отдыхают».

Весь процесс можно разбить на несколько шагов:

  1. Установка Python на рабочий компьютер.

  2. Скачивание на компьютер архива, состоящего из 2-х bat-файлов (один – для настройки окружения, второй – для запуска скрипта), списка необходимых библиотек, скрипта для обработки аудиозаписей.

  3. Настройка виртуального окружения и запуск скрипта.

Разберем код для настройки.

Bat-файл настройки окружения, запускающийся в папке для скрипта:

Python –m venv work_env Work_env\Scripts\pip.exe install -r requirements.txt

Этим действием мы настроили окружение для запуска второго bat-файла с кодом, который запускает сам скрипт.

Код 2-го bat-файла.

Work_env\Scripts\python.exe script_name.py

Важно указать полный путь из виртуального окружения для pip и python для их корректного запуска.

Таким образом возможно подключить к обработке компьютеры коллег, даже не знакомых с программированием и находящихся в разных часовых поясах, написав им небольшую инструкцию.

Усложним задачу. Представим, что обработка у нас в несколько этапов. Первый этап мы проводим у себя на ПК, отправляем результат на сетевую папку, откуда ночью второй ПК должен взять его в обработку. При переносе файлов, сделаем оповещение на почту себе в Outlook, чтобы можно было отслеживать прогресс работы. Как один из вариантов – это записывать файлы в тестовый документ, но это не удобно для просмотра, а в Outlook можно поставить в копию заинтересованных лиц, чтобы они тоже были уведомлены об этапах обработки. Для удобства просмотра сообщений возможно создать правило для перемещения сгенерированных сообщений в отдельную папку по теме сообщения.

Код для решения такой задачи на ПК коллеги может выглядеть следующим образом:

#Импорт библиотек import os  import time import shutil import win32com.client as win32 #Прописываем путь до сетевой папки и папки, в которую необходимо сбрасывать результаты.  directory = r’Folder_path’  destination_path= r’Destination_folder_path’ #Запускаем проверку на наличие файлов каждую минуту While True:   Time.sleep(60) #Получаем список файлов   files = os.listdir(directory)   #Проверяем, появились ли файлы для обработки.   if  len(files)>0:     #При наличии файлов запускаем их в обработку.       for file in files:         #Для примера они просто переносятся в другую папку.         shutil.move(file, file_destination) outlook=win32.Dispatch('outlook.application') mail=outlook.CreateItem(0) mail.To=’my_mail@mail.ru'  #e-mail mail.Subject='Topic'            #Тема mail.Body=’Перенесено '+ str(len(files)) + ‘ в папку ’ + destination_path         #Пишет сколько файлов перенесено и в какую папку mail.Send()                          #Отправка #Если файлов нет, возвращаемся в начало цикла. elif len(files)==0: continue

Совершенствование программы и принципа работы потолка не имеет. При необходимости возможно создать триггер на пришедшую почту и запускать скрипт по триггеру.

Кстати, в моем случае, задействовав 5 компьютеров, поставленную задачу по обработке аудиозаписей удалось решить за 6 дней.

Спасибо за внимание!


ссылка на оригинал статьи https://habr.com/ru/articles/667972/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *