у меня есть код ниже для списка файлов Excel в папке , а после чтения файла с использованием panda, выполнения некоторых заполнений / etc для каждого, компиляции всехфайла в один фрейм данных
ниже - однопотоковая версия кода, и она работает:
Folder = "Folder Name"
StartRead = 2
num_cores = 2
DefaultPath = "C:\\Users\\"
path = DefaultPath + Folder
file_identifier = "*.xlsx"
def reader(filename):
raw_read = pd.read_excel(filename,skiprows=StartRead)
fixed_read = raw_read.fillna(method='ffill')
return fixed_read
def load_serial():
dfs = pd.DataFrame()
list_ = []
file_list = glob2.glob(path + "\\*" + file_identifier)
for f in file_list:
df = reader(f)
list_.append(df)
dfs = pd.concat(list_)
return dfs
data = load_serial()
я пытаюсь сделать то же самое параллельно, так как фактический файл должен быть скомпилировансоставляет около ~ 2000 Excel файл.
Но почему-то ничего не показывает после запуска его в jupyter с 10 тестовыми файлами, как и выше:
import time
import glob2
import pandas as pd
import multiprocessing as mp
from joblib import Parallel, delayed
import os
import concurrent.futures
Folder = "Folder"
StartRead = 2
num_cores = 2
DefaultPath = "C:\\Users\\"
path = DefaultPath + Folder
file_identifier = "*.xlsx"
def reader(filename):
raw_read = pd.read_excel(filename, skiprows=StartRead)
fixed_read = raw_read.fillna(method='ffill')
return fixed_read
def load_serial():
dfs = pd.DataFrame()
list_ = []
file_list = glob2.glob(path + "\\*" + file_identifier)
for f in file_list:
df = reader(f)
list_.append(df)
dfs = pd.concat(list_)
return dfs
start1 = time.time()
if __name__ == "__main__":
file_list = glob2.glob(path + "\\*" + file_identifier)
pool = mp.Pool(num_cores)
list_of_results = pool.map_async(reader, file_list)
pool.close()
pool.join()
end1 = time.time()
Я что-то пропустил?Спасибо
это проверено на моем двухъядерном ноутбуке с 10 файлами, фактический запуск будет на моем 32-ядерном сервере под управлением Windows, с ~ 2000 файлами Excel в каждой папке
Спасибо
Редактировать:
Наконец-то я запустил
Сначала читатель функции должен быть в отдельном файле
Затем обернуть основную функцию, если имя == ' main '
Я протестировал его на майском главном 32-ядерном компьютере, и он правильно спулингирует все ядро
Поставит фиксированный кодзавтра я действительно сонный прямо сейчас ...