如何有效地将一个非常简单的任务平行化?



我有一个python脚本,它可以在一个巨大的输入文件(>10M行(上执行一个非常简单的任务。该脚本归结为:

for line in fileinput.input(remainder):
obj=process(line)
print_nicely(obj)

线条之间没有交互。但输出需要保持与输入行相同的顺序。

我尝试通过这样的多处理来加快速度:

p=mp.Pool(processes=4)
it=p.imap(process,fileinput.input(remainder))
for x in it:
print_nicely(x)
p.close

它似乎使事情变慢,而不是更快。我认为这是由于在进程之间传递行/对象的开销。

是否有可能加快用例/问题的速度,或者 python 中多处理的开销是否太高了?

import multiprocessing as mp
import numpy as np
def process(line):
# do something...
def process_data(data):
return [process(line) for line in data]
num_processes = 4
data = fileinput.input(remainder)
indx = np.linspace(0, len(data), num_processes+1).astype(int)
data_split = [data[indx[i]: indx[i+1]] for i in range(len(indx)-1)]
pool = mp.Pool(processes=num_processes)
processed_data = [d for d in pool.map(process_data, data_split)]

最新更新