Python Multiprocess не завершается

Я новичок в многопроцессорном Python, и я хочу понять, почему мой код не заканчивается (может быть, зомби или тупик) и как это исправить. createChain Функции также выполняют цикл for и возвращают кортеж: (value1, value2), внутри createChain Функция Есть другие вызовы других функций. Я не думаю, что размещение createChain Код функции поможет, потому что внутри этой функции я не делаю что-то в отношении многопроцессорности. Я пытался сделать процессы как дэймон, но все еще не работал. Странно думать, что если я уменьшу значение 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 ответ

Основываясь на очень полезных комментариях Тадхга Макдональда-Дженсена, я лучше понял свои потребности и то, как работают очереди и для каких целей они должны использоваться.

Я изменяю свой код на

def initTable(output):
    maxChains = 1000

    results = []

    with closing(Pool(processes=8)) as pool:
        results = pool.map(createChain, xrange(maxChains))
        pool.terminate()
Другие вопросы по тегам