我有一个非常大的字符串列表(最初来自文本文件),我需要使用
python进行处理.最终我试图采用map-reduce风格的并行处理.
我编写了一个“mapper”函数并将其提供给multiprocessing.Pool.map(),但它与使用完整数据集调用mapper函数所花费的时间相同.我一定做错了什么.
我尝试了多种方法,都有类似的结果.
def initial_map(lines):
results = []
for line in lines:
processed = # process line (O^(1) operation)
results.append(processed)
return results
def chunks(l, n):
for i in xrange(0, len(l), n):
yield l[i:i+n]
if __name__ == "__main__":
lines = list(open("../../log.txt", 'r'))
pool = Pool(processes=8)
partitions = chunks(lines, len(lines)/8)
results = pool.map(initial_map, partitions, 1)
因此,块函数会生成一组原始行的子列表以提供给pool.map(),然后它应该将这8个子列表交给8个不同的进程并通过映射器函数运行它们.当我运行它时,我可以看到我的所有8个核心达到峰值100%.然而它需要22-24秒.
当我简单地运行它(单个进程/线程)时:
lines = list(o