python map reduce 并行_python的简单MapReduce实现:计算π

本文介绍了使用Python的multiprocessing库实现MapReduce框架,并通过并行计算来估算π的值。通过生成随机点并判断其是否在单位圆内,利用Map函数进行分布式计算,Reduce函数汇总结果,最终得到π的近似值。
摘要由CSDN通过智能技术生成

#coding=utf-8

import random

import multiprocessing

from multiprocessing import Process

class MapReduce(object):

def __init__(self, map_func, reduce_func, workers_num=None):

self.map_func = map_func

self.reduce_func = reduce_func

self.workers_num = workers_num

if not workers_num:

workers_num = multiprocessing.cpu_count()*2

self.pool = multiprocessing.Pool(workers_num)

def __call__(self, inputs):

map_result = self.pool.map(self.map_func, inputs)

reduce_result = self.reduce_func(map_result)

return reduce_result

def calculator(*args):

print multiprocessing.current_process().name,' processing'

points, circle_round = args[0]

points_in_circle = 0

for i in range(points):

# 这里其实只取了1/4圆

x = random.random()*circle_round

y = random.random()*circle_round

if (x**2 + y**2) < circle_round**2:

points_in_circle += 1

return points_in_circle

def count_circle_points(points_list):

return sum(points_list)

if __name__ == '__main__':

# 半径

CIRCLE_ROUND = 10

# 总点数

POINTS = 10000000

# 总进程数

WORKERS_NUM = 10

map_reduce = MapReduce(calculator, count_circle_points, WORKERS_NUM)

inputs = [(POINTS/WORKERS_NUM, CIRCLE_ROUND)] * WORKERS_NUM

all_points_in_circle = map_reduce(inputs)

ac_as = float(all_points_in_circle)/POINTS

print 'pi approach to:%7f'%(4*ac_as)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值