0

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

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

所以我写了一些代码:

app.py(Flask 应用程序)

from flask import Flask
from blinker import signal

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

@app.route('/update')
def update():
    updated.send('nothing')
    return 'Updated!'

背景.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)

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

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

4

1 回答 1

5

Blinker 的描述

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

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

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

于 2017-10-09T02:21:47.643 回答