Мне нужно загрузить много файлов .npy в память. Каждый из файлов содержит массив numpy и имеет размер около 3-6 МБ.
Я уже могу загружать эти файлы параллельно, используя numpy.load, но, на мой взгляд, это все равно занимает слишком много времени.
Пример кода:
import threading
import numpy as np
def load_chunk(ch, idx, results):
# ch is a chunk of filenames to load
ars = []
for fn in ch:
ars.append(np.load(fn))
results[idx] = ars
threads = [None] * len(fn_ch)
all_results = [None] * len(fn_ch)
for i in range(len(fn_ch)):
t = threading.Thread(target=load_chunk, args=(fn_ch[i], i, all_results))
t.start()
threads[i] = t
[t.join() for t in threads]
Нет узких мест в инфраструктуре. При выполнении кода процессор и доступные дисковые IOPS вообще не используются.
Рабочая нагрузка распределена по 40 потокам - увеличение этого числа до 80 или уменьшение до 20 не влияет на время загрузки.
Есть ли способ ускорить процесс?