Найти - Пользователи
Полная версия: multiprocessing при обработке нескольких файлов
Начало » Python для новичков » multiprocessing при обработке нескольких файлов
1
Provi
Нужно обработать несколько файлов 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()
xam1816
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)
Provi
Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB