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()