수색…


비고

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 호출하십시오. 신호는 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