我正在尝试使用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)
是否可以访问服务器发送事件的请求上下文?
答案 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")
请注意,要能够使用此装饰器,必须将目标函数移到具有源请求的视图函数中。