Цель программы - запустить каталог, если файл представляет собой электронную таблицу 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 () практически не изменился. Есть предложения?
Заранее спасибо