Python Multiprocess不会终止

时间:2016-05-10 14:20:47

标签: python multiprocess rainbowtable

我是python multiprocess的新手,我想了解为什么我的代码不会终止(可能是zombi或死锁)以及如何修复它。 createChain函数也执行for循环并返回元组:(value1, value2)。在createChain函数内部还有其他函数调用。我不认为发布createChain函数代码会有所帮助,因为在函数内部我没有做多进程的事情。我试图让这些过程成为deamon,但仍然无法正常工作。奇怪的想法是,如果我减少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

1 个答案:

答案 0 :(得分:0)

基于Tadhg McDonald-Jensen的非常有用的评论,我更了解我的需求以及队列的运作方式以及它们应该用于何种目的。

我将代码更改为

def initTable(output):
    maxChains = 1000

    results = []

    with closing(Pool(processes=8)) as pool:
        results = pool.map(createChain, xrange(maxChains))
        pool.terminate()