2017-10-08 52 views
0

我想知道是否可以用blinker库(或者可能用任何库)来完成这些工作。Python - 我可以使用闪烁库来达到这个目的吗?

  1. 我运行使用烧瓶内的web应用程序和该应用程序(也许app.py)内,我定义名为更新(例如blinker.signal('updated'))的信号。
  2. 在一个单独的过程中,我连接(订阅)任何功能(我将它称为subscriber)到更新的信号。这个过程像一个守护进程一样永远运行。
  3. 每当在网络端发生更新,我想调用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!' 

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) 

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

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

回答

1

闪光信号灯的描述is

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

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

你能做什么呢?那么,Python标准库的文档有关于Interprocess Communication and Networking的全部章节。目前尚不清楚您要构建的是什么,但是如果您需要构建任务队列(例如“工人”),请尝试使用CeleryTaskTiger。如果您确实需要在进程之间实际发送消息,那么比较复杂的东西比如ZeroMQ会更合适。

+0

啊,我错过了这个描述。感谢您的明确答复和良好的建议! – hallazzang

相关问题