У меня есть несколько текстовых файлов, которые мне нужно прочитать с помощью Python. Текстовые файлы содержат только массив чисел с плавающей запятой (ie без строк), а размер массива - 2000 на 2000. Я пытался использовать пакет multiprocessing
, но по какой-то причине он теперь работает медленнее. Время, которое у меня есть на моем p c для приведенного ниже кода, составляет
- Многопоточность: 73,89 с
- Однопоточность: 60,47 с
Что я тут не так делаю, есть ли способ ускорить эту задачу? Мой p c работает на процессоре Intel Core i7, и в реальной жизни у меня есть несколько сотен таких текстовых файлов, 600 или даже больше.
import numpy as np
from multiprocessing.dummy import Pool as ThreadPool
import os
import time
from datetime import datetime
def read_from_disk(full_path):
print('%s reading %s' % (datetime.now().strftime('%H:%M:%S'), full_path))
out = np.genfromtxt(full_path, delimiter=',')
return out
def make_single_path(n):
return r"./dump/%d.csv" % n
def save_flatfiles(n):
for i in range(n):
temp = np.random.random((2000, 2000))
_path = os.path.join('.', 'dump', str(i)+'.csv')
np.savetxt(_path, temp, delimiter=',')
if __name__ == "__main__":
# make some text files
n = 10
save_flatfiles(n)
# list with the paths to the text files
file_list = [make_single_path(d) for d in range(n)]
pool = ThreadPool(8)
start = time.time()
results = pool.map(read_from_disk, file_list)
pool.close()
pool.join()
print('finished multi thread in %s' % (time.time()-start))
start = time.time()
for d in file_list:
out = read_from_disk(d)
print('finished single thread in %s' % (time.time() - start))
print('Done')