【发布时间】:2018-02-23 14:31:42
【问题描述】:
我正在开发一个 Flask 应用程序,它需要在 2 秒内返回 HTTP 200 OK。但是我的应用必须在发送 HTTP 200 OK 后启动一些工作。
@app.route('/events-slack', methods=['GET', 'POST'])
def events():
if(rq.is_json):
data = rq.get_json()
if(data['token']==token):
respond(data) #this function take more than 2 seconds
r_data = {
'OK' : True
}
else:
r_data = {
"error" : 'Token mismatch'
}
else:
r_data = {
"error" : 'Request was not JSON'
}
response = app.response_class(
status=200,
mimetype='application/json',
response=json.dumps(r_data)
)
return response
问题是respond函数需要超过2秒来处理它收到的数据。我需要它先发送一个 HTTP 200 请求然后开始它的工作。
编辑
下面是respond函数的代码。
import requests
def respond(data):
if data['type'] == "event_callback":
event = data['event']
if event['type'] == 'message':
r_data = requests.post('URL', data = {'key' : 'data')
else:
r_data = {
"error" : 'Type not recognized'
}
return r_data
【问题讨论】:
-
我什么都听不懂。 2秒是什么?为什么是 2 秒?
-
好吧,如果问题是响应(数据)需要超过 2 秒,我看不出这段代码将如何帮助我们检查问题。您应该向我们展示响应的代码。
-
您可以在 retutn 响应之前打开一个异步任务。更多信息:docs.python.org/3/library/asyncio-task.html
-
@Nabin 我正在使用 Slack 的事件 API,它需要在 2 秒内确认请求的响应,所有其他处理可以稍后完成。
-
@lapinkoira 我在问题中添加了响应函数的代码。
标签: python python-3.x flask