Twisted + Django 作为守护进程加 Django + Apache

Twisted + Django as a daemon process plus Django + Apache

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

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

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

不,这种方法本身并没有错。我们目前在很多工作中都使用类似的方法。

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

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

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