サーチ…
備考
FlaskはBlinkerを使用してシグナルをサポートします。信号のサポートはオプションです。 Blinkerがインストールされている場合にのみ有効になります。
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
信号は非同期ではありません。信号が送信されると、直ちに接続された各機能が順次実行されます。
信号に接続する
関数をシグナルに接続するには、シグナルのconnect
メソッドを使用します。シグナルが送信されると、接続された各関数は、シグナルが提供する名前付き引数および送信者とともに呼び出されます。
from flask import template_rendered
def log_template(sender, template, context, **kwargs):
sender.logger.info(
'Rendered template %(template)r with context %(context)r.',
template=template, context=context
)
template_rendered.connect(log_template)
それらが提供する引数については 、 ビルトインシグナルに関するドキュメントを参照してください。有用なパターンは、予期しない引数をとらえるために**kwargs
引数を追加することです。
カスタム信号
独自のコードでシグナルを作成して送信する場合(たとえば、エクステンションを作成する場合)、新しいSignal
インスタンスを作成し、サブスクライバに通知する必要があるときにsend
メソッドを呼び出しsend
。信号はNamespace
を使用して作成されます。
from flask import current_app
from flask.signals import Namespace
namespace = Namespace()
message_sent = namespace.signal('mail_sent')
def message_response(recipient, body):
...
message_sent.send(
current_app._get_current_object(),
recipient=recipient,
body=body
)
@message_sent.connect
def log_message(app, recipient, body):
...
Blinkerを直接使用するよりFlaskのシグナルサポートを使用することをお勧めします。拡張機能を使用している開発者がBlinkerのインストールを選択していない場合、信号をオプションに残すようにライブラリをラップします。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow