Я начинаю изучать многопроцессорность в 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 раз.
Проблема в том, что окончательная версия не будет напечатана, и код не будет завершен.
Как исправить эту проблему?
Редактировать: Кроме того, поскольку это сокращение, может ли кто-нибудь объяснить, что я делаю неправильно/почему я ниспровергаюсь?
'1000! = 8.2639316883 × 10^(5,565,708)' В этом нет ничего простого. – Daniel
Конечно, нет, но код прост. – Acebulf
Что я имею в виду, так это то, что код для факториалов без многопроцессорности - относительно простой код. – Acebulf