【问题标题】:How can I send server-side events from Flask while accessing the request context?如何在访问请求上下文时从 Flask 发送服务器端事件?
【发布时间】:2019-06-22 15:44:51
【问题描述】:

我正在尝试使用 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)

有没有办法访问服务器发送事件的请求上下文?

【问题讨论】:

    标签: python flask server-sent-events requestcontext


    【解决方案1】:

    您可以使用 @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")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多