1
爲了最小化請求時間,我想在將200返回給客戶端之後執行該方法。客戶端請求後的運行方法
@app.route('/register', methods=['POST'])
def register():
#code and code
return 200
send_email_with_validation_url()
我該怎麼辦?用線程?
爲了最小化請求時間,我想在將200返回給客戶端之後執行該方法。客戶端請求後的運行方法
@app.route('/register', methods=['POST'])
def register():
#code and code
return 200
send_email_with_validation_url()
我該怎麼辦?用線程?
你可以用線程來完成它,但是如果沒有一些控制,最終會導致大量的線程阻塞資源。如果沒有意識到,您也可能會導致進程崩潰。
這是一個隊列系統的工作。 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
將被安排在後臺運行(在不同的線程或進程,甚至如果你想機)用給定的參數和你的服務器將立即返回。
and after_requests?不能處理? – urb
它會在提交請求後運行(請參閱我的編輯) – Joe
@Urbester文檔http://flask.pocoo.org/snippets/53/指出'after_request'對所有請求執行 – Wondercricket