如何在访问请求上下文时从 Flask 发送服务器端事件?
How can I send server-side events from Flask while accessing the request context?
我正在尝试使用 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)
有没有办法访问服务器发送事件的请求上下文?
您可以使用 @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")
请注意,为了能够使用此装饰器,必须将目标函数移动到具有源请求的视图函数中。
我正在尝试使用 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)
有没有办法访问服务器发送事件的请求上下文?
您可以使用 @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")
请注意,为了能够使用此装饰器,必须将目标函数移动到具有源请求的视图函数中。