2015-10-13 38 views
1

爲了最小化請求時間,我想在將200返回給客戶端之後執行該方法。客戶端請求後的運行方法

@app.route('/register', methods=['POST']) 
def register(): 
     #code and code 
     return 200 
     send_email_with_validation_url() 

我該怎麼辦?用線程?

回答

5

你可以用線程來完成它,但是如果沒有一些控制,最終會導致大量的線程阻塞資源。如果沒有意識到,您也可能會導致進程崩潰。

這是一個隊列系統的工作。 Celery將是一個很好的選擇。沿着線的東西:

from celery import Celery 

app = Celery('tasks', broker='amqp://[email protected]//') 

@app.task 
send_email_job(address): 
    send_email_with_validation_url() 


@app.route('/register', methods=['POST']) 
def register(): 
     #code and code 
     send_email_job.delay(address) 
     return 200 

在這個例子中,send_email_job將被安排在後臺運行(在不同的線程或進程,甚至如果你想機)用給定的參數和你的服務器將立即返回。

+0

and after_requests?不能處理? – urb

+0

它會在提交請求後運行(請參閱我的編輯) – Joe

+0

@Urbester文檔http://flask.pocoo.org/snippets/53/指出'after_request'對所有請求執行 – Wondercricket