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)
代码风格
- 日志打印
以文件为模块,打印日志,一个模块仅有唯一的全局变量logger句柄
LOGGER = logging.getLogger(__nam__)
输出类型可选,LOGGER.info(),LOGGER.error
- 参数有多个的时候应该换行
网友评论