Я новичок в многопроцессе python, и я хочу понять, почему мой код не заканчивается (возможно, зомби или тупик) и как его исправить. Функции createChain
также выполняют цикл for и возвращают кортеж: (value1, value2)
. Внутри функции createChain
есть другие вызовы для других функций. Я не думаю, что размещение кода функции createChain
поможет, потому что внутри этой функции я ничего не делаю в отношении многопроцессорности. Я пытался сделать процессы как деамон, но все равно не работал. Странно думать, что если я уменьшу значение maxChains
i.e до 500 или 100 работает.Python Multiprocess не заканчивается
Я просто хочу, чтобы процесс выполнял тяжелые задачи и помещал результаты в тип данных.
Моя версия питона 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 минуту. Кроме того, когда я использую multiprocess, я контролирую CPU, и я вижу, что ядра запущены, и через пару секунд они останавливаются, поэтому работа прекратилась, но программа не завершается. Благодаря! – Laxmana
В этом случае я бы рекомендовал добавлять инструкции 'print' между каждым из шагов (' p.start() 'loop,' p.join() 'loop,' resultsQueue.task_done() ', а затем' temp = ..') и посмотреть, на какой из них он замерзает. –