max*_*max 12 python parallel-processing python-3.x
我之前问过一个相关但非常普遍的问题(尤其是这个回答).
这个问题非常具体.这是我关心的所有代码:
result = {}
for line in open('input.txt'):
key, value = parse(line)
result[key] = value
Run Code Online (Sandbox Code Playgroud)
该函数parse是完全独立的(即,不使用任何共享资源).
我有Intel i7-920 CPU(4核,8个线程;我认为线程更相关,但我不确定).
我该怎么做才能使我的程序使用该CPU的所有并行功能?
我假设我可以打开这个文件,在8个不同的线程中读取而没有太多的性能损失,因为磁盘访问时间相对于总时间来说很小.
Sin*_*ion 18
cPython不提供您正在寻找的线程模型.您可以使用multiprocessing模块和进程池获得类似的东西
这样的解决方案看起来像这样:
def worker(lines):
"""Make a dict out of the parsed, supplied lines"""
result = {}
for line in lines.split('\n'):
k, v = parse(line)
result[k] = v
return result
if __name__ == '__main__':
# configurable options. different values may work better.
numthreads = 8
numlines = 100
lines = open('input.txt').readlines()
# create the process pool
pool = multiprocessing.Pool(processes=numthreads)
# map the list of lines into a list of result dicts
result_list = pool.map(worker,
(lines[line:line+numlines] for line in xrange(0,len(lines),numlines) ) )
# reduce the result dicts into a single dict
result = {}
map(result.update, result_list)
Run Code Online (Sandbox Code Playgroud)
为什么那是最好的方式......
| 归档时间: |
|
| 查看次数: |
18007 次 |
| 最近记录: |