2013-01-11 4 views
0

Я начинаю изучать многопроцессорность в python, но дошел до точки, где мой код просто зависает. Он просто вычисляет 1 000 000 факториалов, используя многопоточность.Python multiprocessing hangs

import multiprocessing 

def part(n): 
    ret = 1 
    n_max = n + 9999 
    while n <= n_max: 
     ret *= n 
     n += 1 
    print "Part "+ str(n-1) + " complete" 
    return ret 

def buildlist(n_max): 
    n = 1 
    L = [] 
    while n <= n_max: 
     L.append(n) 
     n += 10000 
    return L 

final = 1 
ne = 0 
if __name__ == '__main__': 
    pool = multiprocessing.Pool() 
    results = [pool.apply_async(part, (x,)) for x in buildlist(1000000)] 
    for r in results: 
     x = r.get() 
     final *= x 
     ne+= 1 
     print ne 
    print final 

Я включил некоторые функции печати, чтобы попытаться диагностировать, где код висит, и он будет печатать строку включены в функции части 100 раз, как и ожидалось. «Print ne» также работает 100 раз.

Проблема в том, что окончательная версия не будет напечатана, и код не будет завершен.

Как исправить эту проблему?

Редактировать: Кроме того, поскольку это сокращение, может ли кто-нибудь объяснить, что я делаю неправильно/почему я ниспровергаюсь?

+2

'1000! = 8.2639316883 × 10^(5,565,708)' В этом нет ничего простого. – Daniel

+0

Конечно, нет, но код прост. – Acebulf

+0

Что я имею в виду, так это то, что код для факториалов без многопроцессорности - относительно простой код. – Acebulf

ответ

1

Программа отлично работает --- до print final. Затем он тратит очень много времени на то, чтобы напечатать это число, что серьезно огромно ...

+0

Да, он закончил вычисление примерно через 15 минут, когда я позволил ему работать, после вашего комментария. – Acebulf