python中常用的几个web框架有django, tornado, flask等,今天来总结一下django和tornado的不同。
个人感觉django虽然好用,有搭建项目快、自带ORM、自动生成路由、自带管理后台等优势;但若实际工作中选择,我还是会偏向于使用tornado框架,因为tornado使用更加灵活,并且支持websocket,tcp等通信协议,最重要的是tornado是异步非阻塞的web框架;而在django中要实现websocket、异步非阻塞等功能则需要引入dwebsocket、channels、celery等第三方模块。
本文中使用的环境是python3.6, django2.0, tornado5.1。
下面主要从以下两个方面介绍一下他们的不同:
1.异步非阻塞请求
2.websocket的使用
1.异步非阻塞请求
1.1 django
django中可以通过celery来实现异步任务,下面介绍下celery的使用。
1.1.1)首先需要安装 celery和 django-celery,使用pip安装就行了;
1.1.2)然后在settings.py中进行如下配置:
1.1.3)在需要使用异步的app中创建tasks.py文件,然后编辑该文件:
耗时的任务就可以放在使用@task修饰的函数中
1.1.4)在views.py中调用tasks.py中的函数
上面的结果ret是一个AsyncResult对象,可以通过这个对象拿到保存在CELERY_RESULT_BACKEND中的结果。如果想立即得到结果,可以直接调用get()方法,但是这样就会阻塞其他请求,直到结果返回:
1.1.5)启动celery
2)tornado
tornado中实现异步有回调和协程这两种方式,这里只举一个协程实现异步的例子:
或者像下面这样,把获取ip信息的部分封装成一个函数:
也可以同时发起多个异步请求:
AsyncHTTPClient的fetch()方法有两种调用方式,一种是像上面那样只传入一个url的字符串,另一种是接收一个HTTPRequest对象作为参数,像下面这样:
上面介绍了django和tornado不同方面的一个部分,即在实现异步非阻塞方面的不同。还有另一部分会介绍两者在实现websocket方面的不同,这一部分会在下一篇文章中介绍。
今天就介绍到这里,有问题欢迎私信交流。
閱讀更多 贊哥哥 的文章