一.背景

  爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,采用串行的方式执行,只能等待爬取一个结束后才能继续下一个,效率会非常低。

  需要强调的是:串行并不意味着低效,如果串行的都是纯计算的任务,那么cpu的利用率仍然会很高,之所以爬虫程序的串行低效,是因为爬虫程序是明显的IO密集型程序。

 

二.同步,异步,回调机制

在编写爬虫是,性能的消耗主要在IO请求中,当单进程单线程模式下 请求URL时,必然会引起等待,从而使得请求整体变慢。

 

 1.同步:提交一个任务后就在原地等待任务结束,等到拿到任务的结果后在继续下一行代码,效率低下。

import requests

def fetch_async(url):
    response = requests.get(url)
    return response    #返回信息:response.text...

url_list = ['http://www.jiemian.com','http://www.bing.com']

for url in url_list:
    print(fetch_async(url))

1.同步执行