之前为了检测代理的可用性学习了一下aiohttp,网上有关aiohttp的使用很少,所以写篇博客记录下来。
首先,为什么要使用异步编程,先看两张图。
很显然,我们不希望cpu在这些极慢的IO操作上阻塞,我们希望在IO操作期间,CPU能继续执行其他的任务,Python中的异步asyncio能很好实现这一点。
什么是协程?可以参考下面这篇文章
最新Python异步编程详解
aiohttp 简易使用教程
aiohttp基本使用可以参考aiohttp官网
在HTTP事物当中,当我们发送了一个GET请求后,我们的客户端与服务器建立TCP链接会有时延,链接建立后我们发送请求主体服务器接受后处理也会有时间延迟,将响应报文传送回来也会产生延迟,在同步模型中,程序在传输过程中会阻塞,等待传输完成,这将耗费大量的时间。
所以我们希望任何时候,当我们的客户端程序请求发送后,不因等待响应而阻塞,让程序能执行其他的事情,当响应到底后,以某种方法通知程序去处理,或者程序以查询的方式在空闲的时候回去查询这个响应是否到达。
Python的异步编程和异步网络框架可以帮我们做到这一点。
先上代码
import asyncio
from aiohttp import ClientSession
from ip_pool.MongoDB import mongodb
import requests
class ProxyValidator(object):
def __init__(self)