2017-10-08 12 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のインプロセス信号/イベントディスパッチシステム。

強調しているので、ライブラリを使用して2つのプロセス間で信号を送信することはできません。

代わりに何ができますか?さて、Python標準ライブラリのドキュメントには、Interprocess Communication and Networkingの章があります。ビルドしようとしているものは明確ではありませんが、タスクキュー(worker)を構築する必要がある場合などは、CeleryまたはTaskTigerを試してみてください。実際にプロセス間でメッセージを送信する必要がある場合は、ZeroMQのようなもっと複雑なものが適切です。

+0

ああ、私はその説明を忘れてしまった。あなたの明確な答えと良い提案をありがとう! – hallazzang

関連する問題