What is the best way to run Django on Tornado Web Server to have async + django admin + django orm possibilities?

亡梦爱人 提交于 2019-12-03 00:19:35
Nikolay Fominyh

Just take this equation and solve it.

  • You want to have non-blocking IO - X.
  • You want to have django ORM - Y.
  • You want to have django admin - Z.

Now, move point by point:

  • For X - tornado is enough itself.
  • For Z - django is enough itself. I don't think, you want to have thousands of administrators, that manage your site at one time.
  • For Y it is harder. Django ORM is blocking itself.

Best way here - not to use Django ORM with tornado.

Second way - you can dive deeper and integrate it directly in tornado, if you are sure that it will not block whole application. Take solution from this answer.

Third way - you can convert your django application to service, that makes heavy work with ORM, and you can access this service with AsyncHTTPCLient from tornado.

Fourth way - integrate tornado web server into your django application. Actually, it will give you small performance boost.

Fifth way - use two tornado web servers. Sounds crazy, yes. Use one with Django ORM integrated, and second with AsyncHTTPClient.

I believe, that you can take best of 2 worlds.

Django is not asynchronous, so running Django in Tornado will remove most of the performance benefits you might get from Tornado.

If you want maximum async performance, you should use Tornado with a non-blocking database (I'm assuming you want Django admin for use with a SQL database).

If you want maximum ease of development, use Django, with it's ORM system and admin tools.

You can't just mix the best of both worlds, unfortunately.

So, yes, you will lose performance. In this situation I would probably use Tornado and give up on Django admin. If you're dead set on a compromise you could write two apps, sharing a database, but that will mean you need to maintain two data access layers.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!