2013-01-11 73 views
0

我開始學習Python中的多處理,但已到達我的代碼只是掛起點。它只是使用多線程計算1 000 000階乘。Python多處理掛起

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倍,符合市場預期。 「印刷品」也工作100次。

問題是最終不會打印,代碼沒有完成。

我該如何解決這個問題?

編輯此外,由於這是downvoted,有人可以解釋我做錯了/爲什麼我被低估?

+2

'1000!= 8.2639316883×10 ^(5,565,708)'沒有什麼簡單的。 – Daniel

+0

當然不是,但代碼很簡單。 – Acebulf

+0

我的意思是說,沒有多處理的階乘的代碼是相對簡單的代碼。 – Acebulf

回答

1

程序正常工作---直到print final。然後它花了很大的時間試圖打印這個數字,這是非常巨大的...

+0

是的,當我讓它運行約15分鐘後,它完成了計算,並按照您的評論。 – Acebulf