次のコードは私には正しく機能していないようです。たとえば、次のコマンドを使用して、ネットワーク上の別のコンピューターでppserverを起動する必要があります。
ppserver.py -r -a -w 4
このサーバーが起動したら、私のマシンで次のコードを実行します。
import pp
import time
job_server = pp.Server(ppservers = ("*",))
job_server.set_ncpus(0)
def addOneBillion(x):
r = x
for i in xrange(10**9):
r+=1
f = open('/home/tomb/statusfile.txt', 'a')
f.write('finished at '+time.asctime()+' for job with input '+str(x)+'\n')
return r
jobs = []
jobs.append(job_server.submit(addOneBillion, (1,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (2,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (3,), (), ("time",)))
for job in jobs:
print job()
print 'done'
奇妙な部分:/home/tomb/statusfile.txtを見ると、関数が数回実行されているかのように、数回書き込まれていることがわかります。私はこれが1時間以上続くのを観察しましたが、job()
戻ってくることはありませんでした。
Odder:testfunc定義の反復回数を10 ** 8に変更すると、関数は1回だけ実行され、期待どおりの結果が返されます。
ある種の競合状態のように見えますか?ローカルコアを使用するだけで問題なく動作します。これは、ppv1.6.0および1.5.7の場合です。
更新:約775,000,000:一貫性のない結果が得られます:2つのジョブが1回繰り返され、最初に終了します。
1週間後の更新:これを回避するために独自の並列処理モジュールを作成しました。誰かがこれを理解しない限り、将来的には並列pythonを回避します-もう少し詳しく見ていきます(実際にはソースに飛び込みます)コード)ある時点で。
数か月後の更新:残りのハードな感情はありません、ParallelPython。アプリケーションを移行する時間があるとすぐに戻る予定です。ソリューションを反映するためのタイトル編集。