Многопроцессорная обработка Windows Python: при запуске функции ничего не произошло - PullRequest
0 голосов
/ 22 октября 2018

у меня есть код ниже для списка файлов 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-ядерном компьютере, и он правильно спулингирует все ядро ​​

Поставит фиксированный кодзавтра я действительно сонный прямо сейчас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...