Python多处理挂起

时间:2013-01-11 16:58:37

标签: python python-2.7 python-multithreading

我开始在python中学习多处理,但已经到了我的代码挂起的地步。它只是使用多线程计算1 000 000阶乘。

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次。

问题是final不会打印,代码也无法完成。

如何解决此问题?

编辑:此外,由于这是被低估的,有人可以解释我做错了什么/为什么我被投票?

1 个答案:

答案 0 :(得分:1)

程序运行良好---直到print final。然后它花了很多时间试图打印这个数字,这是非常巨大的......