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

2024-04-25 14:10:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在uwsgi后面有一个python应用程序,它以ascync模式运行,以支持服务器发送事件(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信号?共享内存?写入文件?还有什么我不知道的机制吗?你有什么建议?你知道吗


Tags: fromevent数据库应用程序responsedefmysql事件
1条回答
网友
1楼 · 发布于 2024-04-25 14:10:09

就我个人而言,我倾向于使用redis pub/sub来做这类事情。它是快速,可靠和易于使用。基本上,你的SSE应用程序开始在一个发布/子频道上等待,而你的django应用程序发布到它。uWSGI信号也很简单,但它们不携带某种形式的有效载荷,因此可能会受到很大限制。你知道吗

相关问题 更多 >