带有多处理function的Python代码在Windows上不起作用

以下天真的绝对初学者代码在Ubuntu 14.04(Python 2.7.6)和Cygwin(Python 2.7.8)上运行得很好,但是在Windows 64位(Python 2.7.8)上运行得很好。 我观察到与使用多处理包的另一个片段相同。

from multiprocessing import Process, Queue from time import time def WallisPi(N,out): # Pi by the (slowly convergent) Wallis method. prod = 1.0 for i in xrange(2,N,2): prod = prod*(i**2)/((i+1)**2) prod = 2.0e0*prod*(i+1) out.put(prod) return 0 if __name__ == '__main__': T = [15000000, 25000000, 30000000, 40000000] ti = time() q1 = Queue() p1 = Process(target=WallisPi, args=(T[0],q1)) p1.start() q2 = Queue() p2 = Process(target=WallisPi, args=(T[1],q2)) p2.start() q3 = Queue() p3 = Process(target=WallisPi, args=(T[2],q3)) p3.start() q4 = Queue() p4 = Process(target=WallisPi, args=(T[3],q4)) p4.start() p = [p1, p2, p3, p4] for item in p: item.join() q = [q1, q2, q3, q4] print "\n" Num = len(q) for i in range(0,Num): print "Pi at ",T[i], "terms = ", q[i].get() tf = time() print "\nElapsed time: ", round((tf-ti),2), " secs." 

我不知道这个代码有什么问题吗?

非常感谢您的帮助。

福斯托

根据您如何运行Python,您可能需要在Windows上使用freeze_support

我们需要在主模块的if __name__ == '__main__'行之后直接调用这个函数。 例如:

 from multiprocessing import Process, freeze_support def f(): print 'hello world!' if __name__ == '__main__': freeze_support() Process(target=f).start() 

另请参阅Windows上的编程指南 。