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

Весь процесс можно разбить на несколько шагов:
Установка Python на рабочий компьютер.
Скачивание на компьютер архива, состоящего из 2-х bat-файлов (один – для настройки окружения, второй – для запуска скрипта), списка необходимых библиотек, скрипта для обработки аудиозаписей.
Настройка виртуального окружения и запуск скрипта.
Разберем код для настройки.
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 дней.
Спасибо за внимание!
