【发布时间】:2017-07-25 02:25:05
【问题描述】:
我正在尝试拆分以下代码以允许在 python 中进行多处理,这对我来说确实是一项令人沮丧的任务 - 我是多处理的新手,并且已经阅读了文档和尽可能多的示例,但仍然没有找到了一种解决方案,可以同时在所有 cpu 内核上运行。
我想将可迭代对象分成四等份并让它并行计算测试。
我的单线程示例:
import itertools as it
import numpy as np
wmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
pmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
plines1 = it.product(wmod[0],wmod[1],wmod[2])
plines2 = it.product(pmod[0],pmod[1],pmod[2])
check = .915
result = []
for count, (A,B) in enumerate(zip(plines1,plines2)):
pass
test = (sum(B)+10)/(sum(A)+12)
if test > check:
result = np.append(result,[A,B])
print('results: ',result)
我意识到这是一对 3x3 矩阵的一个非常小的例子,但我想将它应用到一对更大的矩阵上,计算大约需要一个小时。感谢您提供的任何建议。
【问题讨论】:
-
好吧,一方面,我会将
result = np.append(result, [A, B])带出你的循环内部。为什么你甚至在这里使用numpy数组而不是list?对于数组与列表,这样的附加将非常低效。奇怪的是你也使用result = []... -
为了可扩展性和效率,我决定使用 numpy。正如我所说,3x3 矩阵仅用于示例。而for循环是一个迭代,它不会保留数据,除非我以某种方式检索它。
-
是的,但
numpy不会神奇地让您的代码更具可扩展性。像这样使用numpy会产生相反的效果。 -
不管你对为什么 numpy 有什么看法,你的 cmets 对我的问题没有多大帮助:多处理。任何实际帮助将不胜感激。
标签: python python-3.x multiprocessing itertools iterable