协程以及queue队列学习

本文深入探讨Python中的协程和Queue队列,重点讲述如何在爬虫项目中利用协程提高并发能力,以及Queue如何实现线程间的高效通信。通过实例解析,帮助读者掌握协程与队列在爬虫中的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异步:在一个任务没有完成的时候就可以执行其他的任务,并且多个任务之间不受影响
同步:一个任务结束之后才能继续执行下一个任务
多协程原理:一个任务在执行的过程中遇到等待就会先去执行其他的任务,当等待结束再来执行之前的那个任务。(在计算机中
   ,这种任务之间切换的非常快速,看上去就像执行多个执行)

在Python中使用gevent模块可以实现异步任务,也就是多协程
在Python中gevent并不是标准库,所以是需要安装的,window电脑直接使用pip install gevent命令,之后点击enter安装即可
MAC电脑中使用pip3 install gevent命令,之后按enter即可

首先需要从gevent模块中导入monkey模块,这个模块可以将程序转换为可异步的程序,然后使用monkey.patch_all()
来将程序实现多协程
其次gevent只能处理gevent对象,所以需要借助gevent.spawn(函数名,参数)来创建任务对象,这里的函数名是不带括号的,如果函数
有参数的话在函数名后面填写上参数即可
在创建多任务的时候需要把创建好的任务对象添加到一个列表中,然后通过gevent.joinall()函数来启动所有的任务
这样即可实现程序的多协程运行

但是在实际生活中任务量多的时候数量可达上千、上万甚至更多,这样多的任务同时进行会拖垮服务器的,所以我们就需要借助queue
模块,queue模块是一种有序的数据结构,翻译为中文就是队列的意思,可以实现数据的存储

在使用协程和队列配合的时候需要导入一下模块
from gevent import monkey
import gevent
from gevent.queue import Queue

接下来在使用Queue的时候需要创建对象
work=Queue()
然后把需要的内容放进队列中,此处以多个url为例
for i in url_list:
   work.put_nowait(i)
最后在函数中可以提取Queue中的内容,在提取之前可以判断队列中是否为空
while not work.empty():
   url=work.get_nowait()
   response=requests.get(url)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值