我想知道我是否可以使用blinker库(或者可能使用任何库)来完成这些工作。
app.py
),我定义了一个名为已更新的信号(例如blinker.signal('updated')
)。subscriber
)连接(订阅)到更新的信号。这个过程像守护进程一样永远运行。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!'
background.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!
。
我的方法有误吗?如果是的话,我该怎么办?等待你的回答,谢谢。
答案 0 :(得分:1)
Blinker的描述is:
快速Python 进程内信号/事件调度系统。
强调我的,所以不能不使用库在两个进程之间发送信号。
你能做什么呢?好吧,Python标准库的文档有一章关于Interprocess Communication and Networking。目前尚不清楚您要构建的是什么,但如果您需要构建任务队列(使用“工作人员”),请尝试Celery或TaskTiger。如果您确实需要在进程之间实际发送消息,那么更复杂的内容(如ZeroMQ)将是合适的。