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