在python程序使用中,尤其在爬虫的使用过程中如果按照传统的方法写程序,当我们遇到很多任务执行的时候,就会使得我们的程序运行效率极度下降,甚至你花一天运行的程序,因为程序缺乏健壮性导致程序报错,使得一天的努力白费。因此今天给大家介绍一下gevent库。
gevent介绍:
gevent是当程序遇到耗时操作时切换到另一个任务的工具,耗时操作不仅指任务休眠,它包括请求互联网等等。
一、安装gevent
pip install gevent
二、一般使用方法
import gevent
def task1(val):
for i in range(1,val):
print(i)
gevent.sleep(0.5)
def task2(val):
for s in range(1,val):
print(s)
gevent.sleep(0.5)
def task3(val):
for v in range(1,val):
print(v)
gevent.sleep(0.5)
g1 = gevent.spawn(task1, 5)
g2 = gevent.spawn(task2, 5)
g3 = gevent.spawn(task3, 5)
g1.join()
g1.join()
g1.join()
这样一来我们很容易利用程序任务中的的耗时去执行另一个任务,这样我们可以省下很多时间去谈恋爱。but我们写的代码总归不会令我们满意,期初写代码的时候我们可能没想要去使用协程,而程序中大量存在请求网页的代码或者time.sleep().代码量少的话我们随便手动改为gevent.sleep(),但是事与愿违,万一代码有几千行,几万好岂不是要改到肾虚。因此我对代码进行了优化。
三、代码优化
import gevent
from gevent import monkey
import time
mokey.patch_all()
def task1(val):
for i in range(1,val):
print(i)
time.sleep(0.5)
def task2(val):
for s in range(1,val):
print(s)
time.sleep(0.5)
def task3(val):
for v in range(1,val):
print(v)
time.sleep(0.5)
gevent.joinall([
g1 = gevent.spawn(task1, 5)
g2 = gevent.spawn(task2, 5)
g3 = gevent.spawn(task3, 5)
])
mokey.patch_all()的存在是gevent自动将程序中所有耗时操作转化为gevent的耗时操作,实现了协程的目的。
注意:
在使用gevent打猴子补丁的时候,首先要注意导入库的顺序,必须最先导入猴子补丁:
import gevent
from gevent import monkey
monkey.patch_all(thread=False)
import requests
from fake_useragent import UserAgent
from selenium import webdriver
from bs4 import BeautifulSoup
from lxml import etree
import time
import re