访问请求上下文时,如何从Flask发送服务器端事件?

时间:2019-06-22 15:44:51

标签: python flask server-sent-events requestcontext

我正在尝试使用Flask将事件流发送到this question中所述的前端客户端。如果我在请求上下文中未访问任何内容,但立即失败,则可以正常工作。

这是一个示例进行演示。

from time import sleep
from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/events')
def events():
    return Response(_events(), mimetype="text/event-stream")

def _events():
    while True:
        # yield "Test"  # Works fine
        yield request.args[0]  # Throws RuntimeError: Working outside of request context
        sleep(1)

是否可以访问服务器发送事件的请求上下文?

1 个答案:

答案 0 :(得分:0)

您可以使用@copy_current_request_context装饰器复制事件流函数可以使用的请求上下文:

from time import sleep
from flask import Flask, request, Response, copy_current_request_context

app = Flask(__name__)

@app.route('/events')
def events():
    @copy_current_request_context
    def _events():
        while True:
            # yield "Test"  # Works fine
            yield request.args[0]
            sleep(1)

    return Response(_events(), mimetype="text/event-stream")

请注意,要能够使用此装饰器,必须将目标函数移到具有源请求的视图函数中。