首页 > 编程语言 > 详细

模拟MapReduce,Python多线程处理

时间:2020-03-13 11:54:46      阅读:95      评论:0      收藏:0      [点我收藏+]

?    MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/value pair的数据集合;然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。

模拟一个最简单的map reduce 的编程

#### 实现一个map reduce 编程。
#### 有一串数字作为输入。,每个数字对7取余。最后把余数相加
import time
mylist=[134,43,49,34,1,34,89,133,13434,379,134,4343,13434,34454,343,134]
def surplus(mynum):
   a=mynum%7
   print a
   ### 为了观察效果,加入sleep
   time.sleep(1)
   return a
?
def plus_all(mylist):
   mysum=0
   for onesurplus in map(surplus,mylist):
      mysum=mysum+onesurplus
   return mysum
if __name__ == __main__:
   print (plus_all(mylist))
以上实现了 一个最简单的map reduce 变成模型,只不过map任务仍然是单线程。在map的调用替换成多任务并发即可。以下用4线程并发调起map()。futures.ProcessPoolExecutor()默认调起线程是cpu的线程数。
#### 实现一个map reduce 编程。
#### 有一串数字作为输入。,每个数字对7取余。最后把余数相加
import time
from concurrent import futures
mylist=[134,43,49,34,1,34,89,133,13434,379,134,4343,13434,34454,343,134]
def surplus(mynum):
   a=mynum%7
   # print(a)
   ### 为了观察效果,加入sleep
   time.sleep(1)
   return a
?
?
def plus_all(mylist):
   mysum=0
   with futures.ProcessPoolExecutor(4) as pool:
      for onesurplus in pool.map(surplus,mylist):
         mysum=mysum+onesurplus
   return mysum
if __name__ == __main__:
   print (plus_all(mylist))

总结:

1、map reduce 编程模型,首先把一个任务分成相同处理流程的多份。编写map 函数,函数返回固定结果集,

2、用并发线程调起map任务。处理map的所有返回结果。

技术分享图片

模拟MapReduce,Python多线程处理

原文:https://www.cnblogs.com/vansky/p/12484494.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!