异步:在一个任务没有完成的时候就可以执行其他的任务,并且多个任务之间不受影响
同步:一个任务结束之后才能继续执行下一个任务
多协程原理:一个任务在执行的过程中遇到等待就会先去执行其他的任务,当等待结束再来执行之前的那个任务。(在计算机中
,这种任务之间切换的非常快速,看上去就像执行多个执行)
在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)
协程以及queue队列学习
最新推荐文章于 2024-09-07 23:10:08 发布