A Web Crawler With asyncio Coroutines

500 lines 是个不错的大牛编写程序,值得好好学习,web爬虫这个项目需要爬取page的所有link,采用异步并发的操作。

异步并发的设计

由于connection的量会比较大,所以需要选择高效的高并发处理操作。
如果采用多线程,一个进程多个线程会导致线程之间频繁切换,效率低,还耗电。
可以采用select,epoll的异步非阻塞IO,并在请求回来数据后,异步调用回调函数。这样耗费的资源比较低。
虽然如此,但是还不够高效,最后一把利器,协程。协程就是用户执行态的程序间切换。python的实现用到了yield 迭代器的next(),send()方法.

@asyncio.coroutine   aiohttp.clientSession

如果想深入了解异步并发,关键词:aiohttp, asyncio,yield

##测试性能比较快的sanic+uvloop
from sanic import Sanic
from sanic.response import json
app = Sanic(__name__)
@app.route('/get')
async def test(request):
    a = request.args.get('a')
    return json({'args': {'a': a}})
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000)

代码风格

  1. 日志打印
    以文件为模块,打印日志,一个模块仅有唯一的全局变量logger句柄
LOGGER = logging.getLogger(__nam__)

输出类型可选,LOGGER.info(),LOGGER.error

  1. 参数有多个的时候应该换行

你可能感兴趣的:(A Web Crawler With asyncio Coroutines)