gpt4 book ai didi

Python异步爬虫多线程与线程池示例详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 34 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python异步爬虫多线程与线程池示例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

背景

当对多个url发送请求时,只有请求完第一个url才会接着请求第二个url(requests是一个阻塞的操作),存在等待的时间,这样效率是很低的。那我们能不能在发送请求等待的时候,为其单独开启进程或者线程,继续请求下一个url,执行并行请求 。

  。

异步爬虫方式

多线程,多进程(不建议)

好处:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作就可以异步会执行 。

弊端:不能无限制开启多线程或者多进程(需要频繁的创建或者销毁进程,线程) 。

线程池,进程池(适当使用)

好处:可以降低系统对进程或线程创建和销毁的频率,从而很好的而降低系统的开销 。

弊端:线程或进程池中的数量是有上限的 。

单线程+异步协程(推荐)

多线程

正常运行如下的代码,需要花费8秒钟的时间,因为sleep是一个阻塞的操作,在等待的时候不会执行别的操作,极大地降低了效率 。

from time import sleepimport timestart = time.time()def xx(str):  print('正在下载:', str)  sleep(2)str = ['xiaozi', 'aa', 'bb', 'cc']for i in str:  xx(i)end = time.time()print('程序运行时间:',end-start)

Python异步爬虫多线程与线程池示例详解

使用多线程后 。

from threading import Threadfrom time import sleepimport timestart = time.time()def xx(str):      print('正在下载:',str)      sleep(2)str =  ['xiaozi','aa','bb','cc']def main():  for s in str:      #开启线程,target=函数名,args=(xx,) ,xx为向函数传递的参数,必须为元组类型,所以后面需要加,      t = Thread(target=xx,args=(s,))      t.start()if __name__ == '__main__':  main()  end = time.time()  print('程序运行时间:',end-start)

但是我们发现下面的运行顺序貌似有点乱的 。

Python异步爬虫多线程与线程池示例详解

线程池

对上面的改为线程池后运行 。

#倒入线程池模块对应的类from multiprocessing.dummy import Poolfrom time import sleepimport timestart = time.time()def xx(str):      print('正在下载:',str)      sleep(2)str =  ['xiaozi','aa','bb','cc']#实例化一个线程池对象,线程池中开辟四个线程对象,并行4个线程处理四个阻塞操作pool = Pool(4)#将列表中的每一个列表元素(可迭代对象)传递给xx函数(发生阻塞的操作)进行处理#map方法会有一个返回值为函数的返回值(一个列表),但是这里没有返回值所以不考虑#调用map方法pool.map(xx,str)end = time.time()print('程序运行时间:',end-start)

Python异步爬虫多线程与线程池示例详解

以上就是Python异步爬虫多线程与线程池示例详解的详细内容,更多关于Python异步多线程与线程池的资料请关注我其它相关文章! 。

原文链接:https://blog.csdn.net/qq_44159028/article/details/118359238 。

最后此篇关于Python异步爬虫多线程与线程池示例详解的文章就讲到这里了,如果你想了解更多关于Python异步爬虫多线程与线程池示例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com