iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python异步爬虫多线程与线程池示例详解
  • 650
分享到

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

2024-04-02 19:04:59 650人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录背景异步爬虫方式多线程,多进程(不建议)线程池,进程池(适当使用)单线程+异步协程(推荐)多线程线程池背景 当对多个url发送请求时,只有请求完第一个url才会接着请求第二个ur

背景

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

异步爬虫方式

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

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

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

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

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

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

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

多线程

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


from time import sleep
import time
start = 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)

使用多线程后


from threading import Thread
from time import sleep
import time
start = 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)

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

线程池

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


#倒入线程池模块对应的类
from multiprocessing.dummy import Pool
from time import sleep
import time
start = 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异步多线程与线程池的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python异步爬虫多线程与线程池示例详解

本文链接: https://www.lsjlt.com/news/137171.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作