私はPythonの並列処理に少し問題があります。私は、パラレルコンピューティングのコンセプトに全く新しいものです。標準のPythonに付属するマルチプロセッシングを使用します。Pythonのマルチプロセッシングに問題があります
私のコンピュータには12のスレッドがあります。私は12人の労働者を求めているが、私が求めているすべての労働者を常に得ることはできない。私の問題は、下記の私のコードでタスクの数nTasksを処理するのに必要な数のワーカーにアクセスできない場合に発生します(現在は4に設定されています)。次に起こるのは、コードがスタックして、「#Get Results」というコメントの下に決して到達しないということだけです。私が(私は常に12を求める)取得する方法多くの労働者のランダムなようだが、私は次のコードで作業員3名以下を取得するときに問題が発生する:私はプールの代わりにpool.map_async使用しようとしました
import multiprocessing as mp
import scipy as sp
import scipy.stats as spstat
import pylab
def testfunc(x0, N):
print 'working with x0 = %s' % x0
x = [x0]
for i in xrange(1,N):
x.append(spstat.norm.rvs(size = 1)) # stupid appending to make it slower
if i % 10000 == 0:
print 'x0 = %s, i = %s' % (x0, i)
return sp.array(x)
def testfuncParallel(fargs):
return testfunc(*fargs)
pool = mp.Pool(12) # I have 12 threads
nTasks = 4
N = 100000
tasks = [(x, n) for x, n in enumerate(nTasks*[N])] # nTasks different tasks
result = pool.map(testfuncParallel, tasks)
pool.close()
pool.join()
# Get results:
sim = sp.zeros((N, nTasks))
for nn, res in enumerate(result):
sim[:, nn] = res
pylab.figure()
for i in xrange(nTasks):
pylab.subplot(nTasks,1, i + 1)
pylab.plot(sim[:, i])
pylab.show()
私は問題を回避することはできません。事前に
おかげで、敬具
、
マティアス
これは私のためにうまくいくようです - どのバージョンのマルチプロセッシング、scipy、pylabを使用していますか? – Noah
12のプロセスを要求していますが、4つのタスクしか提出していないのはなぜですか? – Noah
[pool.close()とpool.join()はmap_async()バージョンでのみ必要です] – Noah