需求

  给定一个list   针对list 中每个元素执行一定的操作(这个操作很费时间,例如爬数据的时候调用某个网站的接口),返回操作后的list

  例如 给定 1-10个数,在每个数字后面加个字母a

方法

1、利用线程池pool 及map 函数 实现

  1. from multiprocessing import Pool
  2. from multiprocessing.dummy import Pool as ThreadPool
  3. import time
  4. pool = ThreadPool(10)
  5.  
  6. #定义函数
  7. def add(x):
  8. time.sleep(0.2)
  9. return str(x) + 'a'
  10.  
  11. ll = list(range(0,10))
  12.  
  13. #原始map
  14. start = time.time()
  15. res = map(add, ll)
  16. print res
  17. print time.time() - start
  18.  
  19. #线程池map
  20. start = time.time()
  21. res = pool.map(add,ll)
  22. print res
  23. print time.time() - start

结论:

可以发现 运行时间缩短了。一定要保证所执行的函数比较费时间,才可以用,否则 大部分时间都用在分发任务上了,

多线程不一定比单线程快。 感兴趣的同学可以试试把time.sleep()去掉。

python3

  1. from multiprocessing import Pool
  2. from multiprocessing.dummy import Pool as ThreadPool
  3. import multiprocessing
  4. import time
  5.  
  6. import numpy as np
  7.  
  8. def cal_sim(A,B):
  9.  
  10. A = np.array(A)
  11. B = np.array(B)
  12. num = A.T * B #若为行向量则 A * B.T
  13. num = num.sum()
  14. denom = np.linalg.norm(A) * np.linalg.norm(B)
  15. cos = num / denom #余弦值
  16. sim = 0.5 + 0.5 * cos #归一化
  17. return sim
  18.  
  19. #线程池map
  20. start = time.time()
  21. A_list = [np.array([1]),np.array([5])]
  22. B_list = [np.array([2]),np.array([3])]
  23.  
  24. with multiprocessing.Pool(processes=3) as pool:
  25. results = pool.starmap(cal_sim, zip(A_list,B_list))
  26. print (results)

参考:

http://python.jobbole.com/81690/

Python 一行代码实现并行的更多相关文章

  1. Python一行代码

    1:Python一行代码画出爱心 print]+(y*-)**-(x**(y*<= ,)]),-,-)]) 2:终端路径切换到某文件夹下,键入: python -m SimpleHTTPServ ...

  2. 【python】10分钟教你用python一行代码搞点大新闻

    准备 相信各位对python的语言简洁已经深有领会了.那么,今天就带大家一探究竟.看看一行python代码究竟能干些什么大新闻.赶紧抄起手中的家伙,跟我来试试吧. 首先你得先在命令行进入python. ...

  3. Python一行代码搞定的事情

    python -m SimpleHTTPServer 8000 http://127.0.0.1:8000/ 有了这一行代码分享本地盘内容就不需要FTP了. pydoc:Python文档工具 pyth ...

  4. python一行代码就能搞定的事情!

    打印9*9乘法表: >>> print( '\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) ...

  5. Python 一行代码

    Python语法十分便捷,通过几个简单例子了解其趣味 1.Fizz.Buzz问题为: 打印数字1到100, 3的倍数打印"Fizz", 5的倍数打印"Buzz" ...

  6. Python一行代码实现快速排序

    上期文章排序算法——(2)Python实现十大常用排序算法为大家介绍了十大常用排序算法的前五种(冒泡.选择.插入.希尔.归并),因为快速排序的重要性,所以今天将单独为大家介绍一下快速排序! 一.算法介 ...

  7. Python一行代码处理地理围栏

    最近在工作中遇到了这个一个需求,用户设定地理围栏,后台获取到实时位置信息后通过与围栏比较,判断是否越界等. 这个过程需要用到数据协议为GEOjson,通过查阅资料后,发现python的shapely库 ...

  8. python一行代码开启http

    python -m SimpleHTTPServer 8000 & 监听8000端口 浏览器用127.0.0.1:8000访问 如果出现no module named SimpleHTTPSe ...

  9. Python一行代码获得IP地址

    比较靠谱的方法, 通过构造UDP包获得本机IP地址   python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.gets ...

随机推荐

  1. OpenCV 常用汇总

    cv::Rect矩形类用法 typedef struct CvRect { int x; /* 方形的左上角的x-坐标 */ int y; /* 方形的左上角的y-坐标*/ int width; /* ...

  2. java -Mac搭建本地服务器并映射到外网

    最近在学习Html,小有进步变想着写一个浪漫的静态页面给女朋友浪漫一下,那么问题就来了,如何把我的网页让对网络一窍不通的女朋友看到,所以便想到了是用自己电脑作为服务器的想法.百度以后整理如下: 首先搭 ...

  3. Web API中的模型验证Model Validation

    数据注释 在ASP.NET Web API中,您可以使用System.ComponentModel.DataAnnotations命名空间中的属性为模型上的属性设置验证规则. using System ...

  4. redis Could not connect to Redis at 127.0.0.1:6379: Connection refused 问题解决

    1.启动redis 客户端 redis-cli 报错 redis Could not connect to Redis at 127.0.0.1:6379: Connection refused 是因 ...

  5. android--WaveView(波浪形View) 的实现记录

    背景 请假回家当伴郎,由于实在无聊,就写下了此篇博客!!按照惯例,先上动态图 怎么样!效果比较赞吧!!! 思路 当我第一次看见这个效果的时候,我的第一个想法是:如果是静态的时候是什么样子的!好,再来张 ...

  6. cxGrid 使用指南 1

    1:cxgrid是应该数据关联的控件,类似dbgrid.2:一般用来查阅表信息,如果要修改的话,直接在上面编辑或添加 非常不方便通常要放几个EDit来对选中的记录进行编辑或添加记录. 因为表一般都有主 ...

  7. 【BZOJ4773】负环 倍增Floyd

    [BZOJ4773]负环 Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边 ...

  8. 淘宝订单数据转CSV

    <html> <body> <div id="result"> </div> <div> <textarea st ...

  9. 解决Windows 7 IIS7.5 用户 'IIS APPPOOL\{站点名} AppPool'登录失败

    今天调试程序的时候,使用VS调试没有任何问题,但是发布到IIS就发生错误了,网上搜索了一下,问题具体上就出在IIS的应用程序池的设置上.我使用的是Windows7 IIS7.5. 错误为:用户 'II ...

  10. SQLServer中计算周

    --本周最大值与最小值.平均值 DECLARE @WeekMax float,@WeekMin float,@WeekAvg float,@AddDate varchar(20) DECLARE @W ...