Python - 我可以为此目的使用闪光灯库吗?

hal*_*ang 0 python flask blinker

我想知道我是否可以使用闪烁库(或者可能使用任何库)来完成这些工作。

  1. 我使用 Flask 运行一个 Web 应用程序,在这个应用程序中(也许app.py),我定义了一个名为updated(例如blinker.signal('updated'))的信号。
  2. 在一个单独的过程中,我将任何函数(我称之为subscriber)连接(订阅)到更新后的信号。这个过程就像守护进程一样永远运行。
  3. 每当Web 端发生更新时,我都希望subscriber调用该函数。

所以我写了一些代码:

app.py(烧瓶应用程序)

from flask import Flask
from blinker import signal

app = Flask(__name__)
updated = signal('updated')

@app.route('/update')
def update():
    updated.send('nothing')
    return 'Updated!'
Run Code Online (Sandbox Code Playgroud)

背景.py

import time

from app import updated

@updated.connect
def subscriber(*args, **kwargs):
    print('An update occurred on the web side!')

while True:
    print('Waiting for signals...')
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

并使用flask run命令运行 Web 应用程序。现在,当我访问时localhost:5000/update,我可以Updated!在浏览器中看到消息,但看不到An update occurred on the web side!来自其他进程的消息。

我的方法错了吗?如果是,我怎么能做这样的工作?等待您的答复,谢谢。

Jac*_*din 5

Blinker 的描述

一个快速的 Python进程内信号/事件调度系统。

强调我的,所以不,你不能使用库在两个进程之间发送信号。

你能做什么呢?好吧,Python 标准库的文档有一整章关于进程间通信和网络。不清楚您要构建什么,但是如果您需要构建一个任务队列(使用“workers”),例如,尝试CeleryTaskTiger。如果您确实需要在进程之间实际发送消息,那么像ZeroMQ这样更复杂的东西将是合适的。