我有Django服务器,用于服务HTTP请求和更新Postgres DB。还有Tornado TCP服务器应该从数据库中推送新数据。
问题是:通知Tornado有关数据库更改的最佳方式。就是这样。
我认为有哪些选择:
NOTIFY
和LISTEN
机制的本机通知支持,这些机制也是异步的,可以轻松添加到Tornado IOLoop(io_loop.add_handler
和连接文件描述符)。这也是低级别,但更重要的是此解决方案违反了数据独立性原则。现在我需要提一个微妙的细节,它可以对我所描述的内容产生重大影响:
DB中99%的更改不是出现在Django进程中,而是出现在由调度程序启动并使用Django ORM的单独脚本(以及独立进程)中。
现在这个描述或多或少反映了项目的实际状态。 那么Celery真的不适合解决这类问题吗? Redis是最好的解决方案吗?还有其他我不知道的吗?任何想法和建议都表示赞赏。
答案 0 :(得分:0)
在评估了所有这些选项之后,我决定采用Redis + Tornado方法。它显示出相当强大和稳定的效果(那是5年前,仅供参考)。我在这里用一个工作示例来布置整个项目:https://www.databrawl.com/2017/04/27/real-time-python-via-tcp/