1

私はpythonマルチプロセスを初めて使用し、コードが終了しない理由(おそらくゾンビまたはデッドロック)とその修正方法を理解したいと考えています。関数はcreateChainfor ループも実行し、タプルを返します: (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
4

1 に答える 1