私はpythonマルチプロセスを初めて使用し、コードが終了しない理由(おそらくゾンビまたはデッドロック)とその修正方法を理解したいと考えています。関数はcreateChain
for ループも実行し、タプルを返します: (value1, value2)
. 関数内createChain
には、他の関数への他の呼び出しがあります。createChain
その関数内でマルチプロセスに関して何かをしていないため、関数コードを投稿しても役に立たないと思います。プロセスをデーモンとして作成しようとしましたが、それでも機能しませんでした。奇妙な考えは、ie の値maxChains
を 500 または 100 に減らすとうまくいくということです。
プロセスにいくつかの重いタスクを実行させ、結果をデータ型に入れたいだけです。
私のpythonのバージョンは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