美文网首页
A Web Crawler With asyncio Corou

A Web Crawler With asyncio Corou

作者: 念念咚咚锵 | 来源:发表于2017-02-23 15:44 被阅读0次

    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 Corou

          本文链接:https://www.haomeiwen.com/subject/sljbwttx.html