У меня есть рекурсивная функция, определенная в классе. Вся функция выполняет синтаксический анализ текстовых файлов, выполняет некоторые вычисления и сохраняет их в файлах HDF5. Он ничего не возвращает.Python, Multiprocessing: что делать, если process.join() ждет навсегда?
Запуск на одном сердечнике происходит очень медленно. Поэтому я попытался использовать модуль multiprocessing
python. Я создаю 4 процесса и вызывая одну и ту же функцию внутри цикла for с разными аргументами.
def main():
f = FileIO() # class which does all the parsing and writing
start_node = '2'
maxDepth = 6
procs = []
start = time.time()
print "Entering for loop"
for i in xrange(4):
p = Process(target = f.read_and_write, args = (node+str(i), maxDepth))
p.start()
procs.append(p)
print "Exited for loop"
for process in procs:
process.join()
end = time.time()
print "Done in ", end - start, "seconds"
if __name__ == '__main__':
main()
операции чтения и записи выполняются успешно и правильно. Единственная проблема - моя программа не выходит. После печати Entering for loop
я ничего не вижу в консоли. От htop
Я вижу, что четыре ядра перестали работать. Но моя программа не выходит.
Я не знаю, как подойти к отладке, поскольку я новичок в использовании этого модуля multiprocessing
. Мои коды логически правильны и работают отлично, не используя модуль multiprocessing
.
- Как проверить статус процесса?
- Как узнать, где находится код?
Я использую Python 2.7.10
| Anaconda 2.1.0 (64-bit)
| ubuntu 14.04 LTS
Любая помощь по отладке этой проблемы приветствуется.
Что происходит в 'f.read_and_write()'? Вы подтвердили, что выполнение фактически достигает конца этой функции? – dano
Его рекурсивная функция, которая называет себя тысячи раз. Я не знаю, как проверить, действительно ли выполнение достигает конца этой функции. – Sounak