私は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が印刷されず、コードが完了しないことです。
この問題を解決するにはどうすればよいですか?
編集:また、これは反対票を投じられているので、誰かが私が間違っていること/なぜ私が反対票を投じられているのかを説明できますか?