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

前端 未结 2 708
不思量自难忘°
不思量自难忘° 2021-02-04 16:34

I would like to have django admin panel with tornado backends, which will process requests from online game. I dont know at the moment, is it a good idea to load django app in t

相关标签:
2条回答
  • 2021-02-04 17:07

    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.

    0 讨论(0)
  • 2021-02-04 17:17

    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.

    0 讨论(0)
提交回复
热议问题