0

私はPythonでマルチプロセッシングを学び始めていますが、コードがハングするところまで来ています。マルチスレッドを使用して、単純に1000000階乗を計算しています。

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

コードがどこでハングするかを診断するためにいくつかのprint関数を含めましたが、期待どおり、part関数に含まれる文字列を100回出力します。「printne」も100回動作します。

問題は、finalが印刷されず、コードが完了しないことです。

この問題を解決するにはどうすればよいですか?

編集:また、これは反対票を投じられているので、誰かが私が間違っていること/なぜ私が反対票を投じられているのかを説明できますか?

4

1 に答える 1

1

プログラムは正常に動作します---までprint final。次に、この番号を印刷するのに非常に長い時間がかかりますが、これは非常に膨大です...

于 2013-01-11T22:20:42.440 に答える