将信息从一个uwsgi请求传递到另一个uwsgi请求?

时间:2014-05-01 22:27:13

标签: python mysql process uwsgi server-sent-events

我在ascync模式下运行uwsgi后面有一个python应用程序来支持服务器发送事件(SSE)。应用程序在mysql数据库上执行各种任务。在SSE连接上,我希望能够在对数据库进行更改时发送事件。

理想情况下,我希望在数据库发生变化时收到通知。搜索到我没有找到任何好的解决方案,不包括在触发器中启动外部过程。由于我不想在每次更改时引入很大的开销,我现在的方法只是报告我的应用程序所做的更改,而不是在mysql shell或类似的任何其他更改。

SSE循环看起来像这样:

def application(env, start_response):
    start_response("200 OK", [('Content-Type', "text/event-stream")])

    while True:
        # wait for event somehow. using uwsgi.wait_fd_read()?

        # parse event from other uwsgi process

        # fetch new or updated data from database

        # generate SSE-event

        ev = ServerSentEvent()
        yield ev.encode()

修改数据库的应用程序的其他部分将是:

def changeDatabase():
    db.performQuery("update foo set .... ")

    # Send some event to other uwsgi processes that foo table has been updated

我该怎么做?信号? uwsgi信号?共享内存?写入文件?我不知道的任何其他机制?你会推荐什么?

1 个答案:

答案 0 :(得分:0)

我个人倾向于使用redis pub / sub来做这类事情。它快速,可靠且易于使用。基本上你的SSE应用程序开始在pub / sub频道上等待,你的django app会发布到它。 uWSGI信号也很容易,但它们不带有某种形式的有效载荷,因此它们可能非常有限。

相关问题