用最简单的办法写多线程的程序

coolpython

共 935字,需浏览 2分钟

 ·

2021-01-28 20:49

python的多线程由于GIL锁的缘故,不能有效利用CPU多核,但是在I/O密集型的任务中,多线程仍然可以有效的提高程序的性能。你可以自己从头编写多线程的程序,也可以使用已经封装好的库,前者可以让你更加熟悉理解如何编写多线程程序,后者可以让你快速完成任务,达到自己的目标。


今天给大家推荐一个非常好用的库,concurrent在2.7的版本中,它还是第三方库,但3.x之后,已经被官方纳入正式版本,可见这个库是多么优秀。使用concurrent编写多线程代码,可以节省大量时间,尤其是对于结果的收集,简直太便利了。下面的代码,演示如何用concurrent 来实现一个多线程的爬虫程序。


import requestsfrom concurrent.futures import ThreadPoolExecutor
urls = ['http://www.baidu.com', 'http://www.zhihu.com', 'http://www.csdn.net']

def web(url): res = requests.get(url) return url, res.status_code

executor = ThreadPoolExecutor(max_workers=3)
for url, status_code in executor.map(web, urls): print(url, status_code)

我们只需要关注在单个线程里需要做什么事情就可以了,就比如我写的web函数,只关心如何爬取一个url,其他的事情,诸如线程池如何创建,爬取的结果如何从子线程返回至主线程,统统不用考虑。


max_workers 指定了线程池的大小,executor.map 需要传入两个参数,第一个参数是子线程里需要执行的函数,第二个参数是一个列表,列表里是需要传入函数的参数,看起来很简单吧!

浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报