django - 在Tornado Web服务器上运行Django以获得异步+ Django管理+ Django Orm可能性的最佳方法是什么?

标签 django orm tornado django-wsgi

我想拥有带有 Tornado 后端的django管理面板,它将处理来自在线游戏的请求。我目前不知道,以下面的方式加载django应用程序是一个好主意:

wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
tornado_app = tornado.web.Application(
[
  ('/hello-tornado', HelloHandler),
  ('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
])
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

HelloHandler将成为后端解析器。

在组合wsgi + ioloop时,我会失去一些性能吗?

如果解决方案不好,则可以运行2个应用程序:django admin和 Tornado 网站。您能回答我如何在Tornado App中使用Django ORM吗?

最佳答案

只需采用此方程式并求解即可。

  • 您想拥有非阻塞IO-X。
  • 您想要django ORM-Y.
  • 您想要django管理员-Z.

  • 现在,逐点移动:
  • 对于X- Tornado 本身就足够了。
  • 对于Z-django本身就足够了。我不认为,你想拥有
    成千上万的管理员,一次可以管理您的网站。
  • 对于Y来说,难度更大。 Django ORM正在阻止自己。

  • 最好的方法-不要在 Tornado 中使用Django ORM。

    第二种方法-如果您确定它不会阻塞整个应用程序,则可以更深入地进行研究并将其直接集成到 Tornado 中。从this答案中获取解决方案。

    第三种方法-您可以将django应用程序转换为服务,这会使ORM繁重工作,并且可以使用 Tornado 中的AsyncHTTPCLient访问此服务。

    第四种方法-将 Tornado Web服务器集成到您的Django应用程序中。实际上,它会给您带来很小的性能提升。

    第五种方式-使用两个 Tornado Web服务器。听起来很疯狂,是的。结合使用集成了Django ORM的产品和结合使用AsyncHTTPClient的产品。

    我相信,您可以选择两个世界中最好的一个。

    关于django - 在Tornado Web服务器上运行Django以获得异步+ Django管理+ Django Orm可能性的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8733752/

    相关文章:

    python - Django 找不到本地安装的 Python 模块

    python - django form.is_valid 返回 false

    java - Grails - 保存域对象时 - 我收到 "rejected value [null] error"

    python - Tornado +桃子。重新启动损坏的连接

    python - 在 Tweepy 和 Tornado WebSocket 中的类之间传递数据

    django - django模型和sqlite db创建错误

    Django 何时使用拆卸方法

    javascript - 在 python (Django) 中读取 Json

    java - 鉴别器公式

    python - 为什么我的 Tornado/Flask 服务器在用请求敲打它时会在 Windows 上阻塞并死机?