Как стать автором
Обновить

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

Время на прочтение 2 мин
Количество просмотров 3.8K

В ходе работы возникла задача обработки огромного объема (~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 дней.

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

Теги:
Хабы:
+1
Комментарии 12
Комментарии Комментарии 12

Публикации

Истории

Работа

Data Scientist
61 вакансия
Python разработчик
128 вакансий

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн