【发布时间】:2012-09-16 04:54:51
【问题描述】:
我使用多处理模块在 Python 中编写了简单的monte-carlo π calculation 程序。 它工作得很好,但是当我为每个工人通过 1E+10 次迭代时,出现了一些问题,结果是错误的。我不明白是什么问题,因为在 1E+9 次迭代中一切正常!
import sys
from multiprocessing import Pool
from random import random
def calculate_pi(iters):
""" Worker function """
points = 0 # points inside circle
for i in iters:
x = random()
y = random()
if x ** 2 + y ** 2 <= 1:
points += 1
return points
if __name__ == "__main__":
if len(sys.argv) != 3:
print "Usage: python pi.py workers_number iterations_per_worker"
exit()
procs = int(sys.argv[1])
iters = float(sys.argv[2]) # 1E+8 is cool
p = Pool(processes=procs)
total = iters * procs
total_in = 0
for points in p.map(calculate_pi, [xrange(int(iters))] * procs):
total_in += points
print "Total: ", total, "In: ", total_in
print "Pi: ", 4.0 * total_in / total
【问题讨论】:
-
你得到的错误结果是什么?
-
@AmirRachum π 就像 ~0.4 总迭代次数是正确的。
-
不管
procs是什么,都会发生这种情况吗?procs使用什么样的值? -
为什么 iters 是 float 而不是 int?例如,10000.0001 次迭代意味着什么?
-
@MattiLyra 没有除以
procs数字。所以不应该。我稍后会测试它。 @abarnert 为指数。 1E+NUM 很有用。
标签: python parallel-processing iteration montecarlo pi