加载中…

加载中...

python并行化(多线程/多进程)

转载 2018-02-22 15:23:48

程序猿对编程语言的理解程度不同,写程序的速度与质量会大有不同,要学会利用语言的优点

常规的python多线程/多进程,使用队列queue进行主控与线程间的参数双向传递​,较为平庸

以下充分利用​python优点,快速写出高效的代码

一、使用map函数,简化操作

使用map函数:

urls = ['http://www.yahoo.com', 'http://www.reddit.com']

results = map(urllib2.urlopen, urls)

​可以简化如下功能:

​results = []

for url in urls: 

    results.append(urllib2.urlopen(url))

 

二、调用正确的库

在 Python 中有个两个库包含了 map 函数: multiprocessing 和它鲜为人知的子库 multiprocessing.dummy

执行IO 密集型任务选择multiprocessing.dummy,CPU 密集型任务选择multiprocessing

from multiprocessing import Pool​

from multiprocessing.dummy import Pool as ThreadPool

 

三、实例

from multiprocessing.dummy import Pool as ThreadPool

urls = [ 'http://www.python.org', 'http://www.python.org/community/awards/']

#​一般来说,执行 CPU 密集型任务时,调用越多的核速度就越快。但是当处理网络密集型任务时,事情有有些难以预计了,通过实验来确定线程池的大小才是明智的。

pool = ThreadPool(4) 

results = pool.map(urllib2.urlopen, urls)

#close the pool and wait for the work to finish 

pool.close() 

pool.join() 


参考​https://medium.com/@thechriskiehl/parallelism-in-one-line-40e9b2b36148

 

阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report
相关阅读
加载中,请稍后
zzzzfeng
  • 博客等级:
  • 博客积分:0
  • 博客访问:19,041
  • 关注人气:0
  • 荣誉徽章:

相关博文

新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有