【问题标题】:Twisted + Django as a daemon process plus Django + ApacheTwisted + Django 作为守护进程加上 Django + Apache
【发布时间】:2015-08-25 20:49:37
【问题描述】:

我正在开发一个分布式系统,其中一个进程正在控制一个硬件,我希望它作为服务运行。我的应用基于 Django + Twisted,因此 Twisted 维护主循环,我通过 Django 访问数据库 (SQLite),入口点是 Django 管理命令。

另一方面,对于用户界面,我正在同一个数据库上的同一个 Django 项目上编写一个 Web 应用程序(也使用 Crossbar 作为 websockets 和 WAMP 服务器)。这是访问同一数据库的第二个 Django 进程。

我在这里寻找一些验证。这种方法有什么根本错误吗?我特别害怕数据库问题(两个不同的进程通过 Django ORM 访问它)。

【问题讨论】:

  • WebSockets 和 Apache 通常不会一起使用,所以不确定您在这方面想做什么。
  • 感谢您的评论。事实上,我使用 Crossbar 作为 Websockets (WAMP) 服务器。 Apache 将是 Django webapp 的 web 服务器,虽然我目前正在使用开发服务器,并且我想考虑一个更轻量级的服务器来服务 Django 应用程序(但我还需要 CGI 支持 MapServer 和 WSGI 支持 Django和 MapProxy)。

标签: python django sqlite twisted daemon


【解决方案1】:

考虑到 Django 和所有基于 WSGI 的 Web 服务器一样,几乎总是有多个进程访问数据库。因为单个 WSGI 进程一次只能处理一个连接,所以服务器在获得大量流量时并行运行多个进程是正常的。

这并不意味着没有理由担心。您拥有数据库,就好像数据可能在任何两次调用之间发生变化一样。熟悉Django uses transactions(默认是自动提交模式,而不是原子请求)以及...

哦,你说的是sqlite。是的,当您需要从多个进程写入时,sqlite 可能不是最好的数据库。我可以想象这可能适用于一个硬件的单用户界面,但如果你在添加 web 应用程序时遇到任何问题,你会想要换成像 postgresql 这样的数据库服务器。

【讨论】:

  • 谢谢。我现在也可以验证这个架构并且它工​​作正常。您关于 WSGI 已经使用多个进程的提示非常有帮助。附带说明一下,SQLite 的行为是正确的,当然在高负载下它可能会阻塞太久,但这是意料之中的。
【解决方案2】:

不,这种方法本质上没有任何问题。我们目前在很多工作中都使用类似的方法。

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2014-11-24
    • 2014-09-01
    • 2018-04-08
    • 2011-06-27
    • 2023-03-02
    • 2011-06-28
    • 2018-06-11
    • 2014-07-03
    相关资源
    最近更新 更多