回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>所以我已经用numpy和multiprocessing写了一段时间的数值。它工作正常,但我收集结果有困难。我用下面的方法来完成,我用一个队列作为输入,一个队列作为输出。程序从输入队列读取参数,对其进行处理,然后将结果放入输出队列。稍后,在主进程中,我从队列中读取它并对其进行pickle处理。像这样:</p>
<pre><code>def fun(inp,outp):
while True:
try:
params = inp.get(block=False)
results = runprocess(params)
out.put(results,block=False)
except Empty:
break
</code></pre>
<p>稍后在主循环中,我将执行以下操作:</p>
^{pr2}$
<p>但不知何故,总会有两种情况发生:要么pickle是空的,要么进程挂起并保持运行,使用0%的cpu(一开始它们会上升到100%,基本上是数字运算)。你觉得我做错什么了吗?在</p>
<p>好吧,我重新做了一遍池.map(). 为了让大家都知道我是怎么做到这一点的:</p>
<pre><code> ncpus = mp.cpu_count()
out = dict()
params = [(a,p) for p in np.arange(0.0,2.0,0.1) for a in np.arange(0.001,2.0,0.1)]
pool = mp.Pool(processes=ncpus)
results = pool.map(runm,params)
for i in results:
sigs = np.zeros((order,order))
sigsmf = np.zeros((order,order))
sigseq = np.zeros((order,order))
xs = np.array([])
freqs = np.array([])
[(a,p),sigs[:,:],sigsmf[:,:],sigseq[:,:],xs,freqs] = i
out[(a,p)] = [sigs[:,:],sigsmf[:,:],sigseq[:,:],xs,freqs]
print a, p, sigs[0,0]
</code></pre>
<p>工作起来很有魅力,更容易实现!在</p>
<p>谢谢费迪南德!我不知道该怎么做,但我想我们现在可以结束这个问题了!在</p>