Я пытаюсь разобрать много файлов, найденных в каталоге, однако использование многопроцессорности замедляет мою программу.
# Calling my parsing function from Client.
L = getParsedFiles('/home/tony/Lab/slicedFiles') <--- 1000 .txt files found here.
combined ~100MB
Следуя этому примеру из документации python:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
Я написал этот фрагмент кода:
from multiprocessing import Pool
from api.ttypes import *
import gc
import os
def _parse(pathToFile):
myList = []
with open(pathToFile) as f:
for line in f:
s = line.split()
x, y = [int(v) for v in s]
obj = CoresetPoint(x, y)
gc.disable()
myList.append(obj)
gc.enable()
return Points(myList)
def getParsedFiles(pathToFile):
myList = []
p = Pool(2)
for filename in os.listdir(pathToFile):
if filename.endswith(".txt"):
myList.append(filename)
return p.map(_pars, , myList)
Я последовал примеру, поместил все имена файлов, заканчивающиеся на .txt
в списке, затем создал пулы и сопоставил их с моей функцией. Затем я хочу вернуть список объектов. Каждый объект содержит анализируемые данные файла. Однако меня поражает, что я получил следующие результаты:
#Pool 32 ---> ~162(s)
#Pool 16 ---> ~150(s)
#Pool 12 ---> ~142(s)
#Pool 2 ---> ~130(s)
Технические характеристики машины:
62.8 GiB RAM
Intel® Core™ i7-6850K CPU @ 3.60GHz × 12
Что мне здесь не хватает?
Спасибо заранее!