私はPythonマルチプロセスに慣れていません。私のコードが終了しない理由(おそらく、ゾンビまたはデッドロック)とそれを修正する方法を理解したいと思います。 createChain
関数はforループも実行し、タプル:(value1, value2)
を返します。 createChain
の中には、他の関数を呼び出す関数があります。私はcreateChain
機能コードを投稿することは、その機能の中で私がマルチプロセスに関する何かをしていないので助けになるとは思わない。私はデアモンとしてプロセスを作ろうとしましたが、まだ動作しませんでした。奇妙なことに、私がmaxChains
の値を小さくすると、つまり500または100が機能しているということです。Pythonマルチプロセスが終了しない
私はちょうどいくつかの重い作業を行い、その結果をデータ型に入れたいと思っています。 pythonの
私のバージョンは非常に便利な、私はより良い自分のニーズを理解Tadhgマクドナルド・ジェンセンのコメントとどのようにキューが働き、どのような目的のために、彼らが使用する必要がありますに基づいて2.7
def createTable(chainsPerCore, q, chainLength):
for chain in xrange(chainsPerCore):
q.put(createChain(chainLength, chain))
def initTable():
maxChains = 1000
chainLength = 10000
resultsQueue = JoinableQueue()
numOfCores = cpu_count()
chainsPerCore = maxChains/numOfCores
processes = [Process(target=createTable, args=(chainsPerCore, resultsQueue, chainLength,)) for x in range(numOfCores)]
for p in processes:
# p.daemon = True
p.start()
# Wait for hashing cores to finish
for p in processes:
p.join()
resultsQueue.task_done()
temp = [resultsQueue.get() for p in processes]
print temp
に私のコードを変更するには、それは本当に長い時間がかかることは可能ですか?それが実行されている間の処理にどれだけの距離の信号を得ることができる方法はありますか? –
それはそれほど時間がかかりません。マルチプロセスなしで実行すると、1分で終了します。また、マルチプロセスを使用しているときにCPUを監視していて、コアが動作していることを確認してから数秒後に作業が終了しますが、プログラムは終了しません。ありがとう! – Laxmana
その場合は、 'p.start()'ループ、 'p.join()'ループ、 'resultsQueue.task_done()'、そして 'temp = ..))、それがどれがフリーズしているかを見てください。 –