我在基于Intel i3的机器上运行以下代码,该机器具有4个虚拟内核(2个超线程/物理内核,64位)和安装的Ubuntu 14.04:
n = multiprocessing.cpu_count()
executor = ThreadPoolExecutor(n)
tuple_mapper = lambda i: (i, func(i))
results = dict(executor.map(tuple_mapper, range(10)))
代码似乎没有以并行方式执行,因为CPU的使用率仅为25%。在利用率图表中,一次仅100%使用4个虚拟核心中的一个。使用的核心每10秒左右交替一次。
但是并行化在具有相同软件设置的服务器计算机上运行良好。我不知道核心的确切数量和确切的处理器类型,但我确信它有几个核心并且利用率为100%并且计算速度快(使用并行化后速度提高了10倍)一些实验用它)。
我希望,并行化也可以在我的机器上运行,而不仅仅是在服务器上。
为什么不起作用?它与我的操作系统设置有关吗?我必须改变它们吗?
提前致谢!
更新: 有关背景信息,请参阅下面的正确答案。为了完整起见,我想提供一个解决问题的示例代码:
tuple_mapper = lambda i: (i, func(i))
n = multiprocessing.cpu_count()
with concurrent.futures.ProcessPoolExecutor(n) as executor:
results = dict(executor.map(tuple_mapper, range(10)))
在重复使用之前,请注意您正在使用的所有函数都在模块的顶层定义,如下所述: Python多处理酸洗错误