2017-09-14 107 views
-1

我正在使用Flask應用程序,它需要在2秒內返回HTTP 200 OK。但是我的應用程序在發送HTTP 200 OK之後必須啓動一些工作。在返回HTTP 200後執行函數在燒瓶中OK 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 

問題是響應函數採用2秒以上來處理它接收到的數據。我需要它先發送HTTP 200請求,然後開始工作。

編輯

下面是響應函數的代碼。

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 
+0

我什麼都聽不懂。什麼是2秒?爲什麼2秒? – Nabin

+0

那麼,如果問題是響應(數據)需要超過2秒,我沒看到這個代碼將如何幫助我們檢查問題。您應該向我們顯示回覆的代碼。 – lapinkoira

+0

您可以在retutn響應之前打開一個異步任務。更多信息:https://docs.python.org/3/library/asyncio-task.html –

回答