Multiprocessing Python code not working on Windows
The following naive absolute newbie code works at 100% on Ubuntu 14.04 (Python 2.7.6) and Cygwin (Python 2.7.8), but it hangs on Windows 64-bit (Python 2.7.8). I observed the same with other snippets using the multiprocessing package .
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."
I wonder what happened to this code?
Thanks a lot for any help.
Fausto
+3
source to share
1 answer
Depending on how you start Python, you may need freeze_support
on Windows:
You need to call this function right after the line of the
if __name__ == '__main__'
main module. For example:
from multiprocessing import Process, freeze_support def f(): print 'hello world!' if __name__ == '__main__': freeze_support() Process(target=f).start()
See also Windows programming guidelines .
0
source to share