码迷,mamicode.com
首页 > 编程语言 > 详细

python笔记——简易线程池multiprocessing.Pool

时间:2014-08-21 17:27:04      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:http   io   for   ar   art   问题   代码   html   

多线程模型设计是一个比较复杂的逻辑,但是python对于多线程的处理却有种种方便的类库,不需要过多的纠结线程间的操作细节。比如multiprocessing.Pool就是其中之一。

官方给的范例也很简单。

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == ‘__main__‘:
    pool = Pool(processes=4)              # start 4 worker processes
    result = pool.apply_async(f, [10])    # evaluate "f(10)" asynchronously
    print result.get(timeout=1)           # prints "100" unless your computer is *very* slow
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"

并未做太多的详细解释。正好我手头有一段代码,需要请求几百个url,解析html页面获取一些信息,单线程for循环效率极低,因此看到了这个模块,想用这个实现多线程分析,参考代码如下:

from multiprocessing import Pool

def analyse_url(url):
    #do something with this url
    return analysis_result

if __name__ == ‘__main__‘:
    pool = Pool(processes=10)
    result = pool.map(analyse_url, url_list)

确实比以前单线程for循环url_list列表,一个个请求analyse_url要快得多,但是带来的问题就是一旦pool.map没执行完就ctrl-c中断程序,程序就会异常,永远无法退出,参考stackoverflow的这个帖子,修改为以下代码:

#result = pool.map(analyse_url, url_list)
result = pool.map_async(analyse_url, url_list).get(120)

至此问题完美解决

python笔记——简易线程池multiprocessing.Pool,布布扣,bubuko.com

python笔记——简易线程池multiprocessing.Pool

标签:http   io   for   ar   art   问题   代码   html   

原文地址:http://my.oschina.net/abcfy2/blog/305159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!