一、gevent库
安装方法:
window电脑:在终端输入命令:pip install gevent
mac电脑:在终端输入命令:pip3 install gevent
创建任务与执行执行:
gevent.spawn()
#创建任务
gevent.joinall()
#执行任务
简单的多协程代码:
from gevent import monkey
import gevent,requests
monkey.patch_all()
#把程序变成协作式运行,固定写法
url_list = ['url','ur2','ur3','ur4','ur5']
#需要请求的网址列表
def crawler(url):
r = requests.get(url)
#执行requests.get(url)任务
tasks_list = [ ]
for url in url_list:
task = gevent.spawn(crawler,url)
#用gevent.spawn()函数创建任务(参数需为要调用的函数名及该函数的参数)
tasks_list.append(task)
#将task增加到任务列表中
gevent.joinall(tasks_list)
#启动执行tasks_list中的所有任务
二、queue模块
当需要创建大量任务时,就得使用queue模块
queue模块功能:
Queue()
#创建队列
put_nowait(url)
#存储数据
get_nowait()
#读取数据
empty()
#判断队列是否为空
full()
#判断队列是否已满
qsize()
#判断队列剩余数量
简单代码:
from gevent import monkey
import gevent,requests
from gevent.queue import Queue
monkey.patch_all()
url_list = ['url','ur2','ur3','ur4','ur5','ur6']
#需要请求的网址列表
work = Queue()
#创建队列对象,并赋值给work
for url in url_list:
work.put_nowait(url)
#用put_nowait()函数把网址都放进队列里
def crawler():
while not work.empty():
#当队列不是空的时候,就执行下面的程序
url = work.get_nowait()
#用get_nowait()函数把队列里的网址都取出
r = requests.get(url)
print(work.qsize())
#打印队列里还剩多少数量
tasks_list = [ ]
#创建空的任务列表
for x in range(3):
#相当于创建了3个爬虫
task = gevent.spawn(crawler)
#用gevent.spawn()函数创建执行crawler()函数的任务
tasks_list.append(task)
#往任务列表添加任务
gevent.joinall(tasks_list)
以上执行代码异步爬取网址:
3个爬虫并发执行
第1个爬虫网址为:url,ur4
第2个爬虫网址为:ur2,ur5
第3个爬虫网址为:ur3,url6