django开发-比较django和tornado框架的不同

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中进行如下配置:

django开发-比较django和tornado框架的不同

1.1.3)在需要使用异步的app中创建tasks.py文件,然后编辑该文件:

django开发-比较django和tornado框架的不同

耗时的任务就可以放在使用@task修饰的函数中

1.1.4)在views.py中调用tasks.py中的函数

django开发-比较django和tornado框架的不同

上面的结果ret是一个AsyncResult对象,可以通过这个对象拿到保存在CELERY_RESULT_BACKEND中的结果。如果想立即得到结果,可以直接调用get()方法,但是这样就会阻塞其他请求,直到结果返回:

django开发-比较django和tornado框架的不同

1.1.5)启动celery

django开发-比较django和tornado框架的不同

2)tornado

tornado中实现异步有回调和协程这两种方式,这里只举一个协程实现异步的例子:

django开发-比较django和tornado框架的不同

或者像下面这样,把获取ip信息的部分封装成一个函数:

django开发-比较django和tornado框架的不同

也可以同时发起多个异步请求:

django开发-比较django和tornado框架的不同

AsyncHTTPClient的fetch()方法有两种调用方式,一种是像上面那样只传入一个url的字符串,另一种是接收一个HTTPRequest对象作为参数,像下面这样:

django开发-比较django和tornado框架的不同

上面介绍了django和tornado不同方面的一个部分,即在实现异步非阻塞方面的不同。还有另一部分会介绍两者在实现websocket方面的不同,这一部分会在下一篇文章中介绍。

今天就介绍到这里,有问题欢迎私信交流。


分享到:


相關文章: