Только используя 20% ЦП после multiprocessing.pool.starmap () в Python - PullRequest
0 голосов
/ 14 июня 2019

Цель программы - запустить каталог, если файл представляет собой электронную таблицу Excel, он должен открыть ее, извлечь и обработать некоторые данные, а затем перейти к следующему файлу. Поскольку это трудоемкий процесс, я попытался разделить задачу на несколько потоков. Даже после этого используется только 20% общей мощности процессора, и это не особенно ускорилось.

def extract_data(unique_file_names):
    global rootdir
    global newarray
    global counter
    global t0
    string = rootdir + "\\" + str(unique_file_names[0])
    wb = load_workbook(string, read_only = True,  data_only=True)
    ws = wb["Sheet1"]
    df = pd.DataFrame(ws.values)
    newarray = df.loc[4:43,:13].values

    counter = 0
    print("Starting pool")
    pool = ThreadPool(processes=20)
    pool.map(process, unique_file_names)    
    pool.close() 

def process(filename):
    global newarray
    global unique_file_names
    global counter
    global t0
    counter+=1

    try: 
        file_name = rootdir + "/" + str(filename)
        wb = load_workbook(file_name, read_only = True,  data_only=True)
        ws = wb["Sheet1"]
        df = pd.DataFrame(ws.values)
        newarray = np.hstack((newarray, df.loc[4:43,4:13].values))
    except:
        print("Failure")
        pass

    print("Time   %.2f,  Completed  %.2f %% " %((time.clock()-t0),counter*100/len(unique_file_names)))

Таким образом, примерно одна с половиной секунды обрабатывается одна электронная таблица, но, как я уже сказал, pool.map () практически не изменился. Есть предложения?

Заранее спасибо

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