Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 6, 2022 09:10:28

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing при обработке нескольких файлов

Нужно обработать несколько файлов Excel.
По одному обрабатывается. Но занимает мало процессора и много времени.
Нужно сделать наоборот: все ядра работают, но обработка занимает мало времени.
В идеале хочу разбить все файлы на группы и скармливать каждому процессору свои файлы на обработку.
Что я делаю не правильно? И что сделать, что бы заработало?
Последний вариант кода:

%%time
import pandas as pd
import os
import shutil
import openpyxl as excl
import xlwings as xw
from xlwings.constants import DeleteShiftDirection
import time
import re
from multiprocessing import Pool
import multiprocessing as mp
import multiprocessing
import sys
import os
import subprocess


counter = 0
folder = 'inputData/'
output_folder = 'outputData/'
basedir = os.path.abspath(os.getcwd())
# basedir


def split_file(file):
global counter
global folder
global output_folder
global basedir
try:
print(file)
output_temp_file = output_folder+file+'_temp'+".xlsx"
shutil.copy(folder+file, output_temp_file)

book = excl.load_workbook(output_temp_file)
pages = book.sheetnames
pages_drop = pages[1::2]
for page in pages_drop:
del book[page]
pages = book.sheetnames
# print(pages)
for page in pages:
##-------------------------Оставляем только ЛС------------------------------
##________________Чистим строки в ячейке с ЛС_______________________________
sheet_active = book[page]
head, sep, tail = sheet_active['A2'].value.partition(' \n')
sheet_active['A2'] = head
head, sep, tail = sheet_active['A2'].value.partition('Владелец')
sheet_active['A2'] = head
##________________Удаляем данные в ячейке с адресом_________________________
# try:
# sheet_active['F2'] = None
# except:
# sheet_active['G2'] = None
########## Делаем промежуточное сохранение ################################
book.save(output_temp_file)
########### Обрабатываем каждый лист #######################################
counter += 1
##__________________Ищем счет __________________________
head, sep, tail = sheet_active['A2'].value.partition('Клиента:')
account = re.sub("^\s+|\n|\r|\s+$", '', tail)
# print(account)

new_wb = str(output_folder + account + ".xlsx")
shutil.copy(output_temp_file, new_wb)
wb = excl.load_workbook(new_wb)
pages_new = wb.sheetnames
list_dir.append(new_wb)
for page_new in pages_new:
if page_new != page:
del wb[page_new]
wb.save(output_folder + account + ".xlsx")
# return counter
except:
print('Ошибка в файле:', file)

book.save(output_temp_file)
os.remove(output_temp_file)

if __name__ == "__main__":
path=folder
new_path=output_folder
file_collection = os.listdir(path)
p1=mp.Process(target=split_file, args=([path+args for args in file_collection[0::3]]))
p2=mp.Process(target=split_file, args=([path+args for args in file_collection[1::3]]))
p3=mp.Process(target=split_file, args=([path+args for args in file_collection[2::3]]))
p1.start()
p2.start()
p3.start()

p1.join()
p2.join()
p3.join()

Офлайн

#2 Дек. 6, 2022 11:33:22

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1121
Репутация: +  99  -
Профиль   Отправить e-mail  

multiprocessing при обработке нескольких файлов

Provi
Нужно обработать несколько файлов Excel.
  
import multiprocessing
 
file_lst = ['file_1', 'file_2', 'file_3']
 
def worker(file):
    pass # работа с файлом
 
if __name__ == '__main__':
    
    with multiprocessing.Pool(3) as pool:
        pool.map(worker, file_lst)

Офлайн

#3 Дек. 6, 2022 13:48:13

Provi
Зарегистрирован: 2021-04-09
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing при обработке нескольких файлов

Спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version