我有一個使用 Flask 和 Celery 的應用程式。現在我有一個名為“/get-products”的端點,但我希望它在我呼叫它時被調度。
我想要的是呼叫那個端點,它自己安排,沒有觸發其他功能或任何東西
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
這是一般的想法:
創建一個將在名為的函式中進行實際處理的函式,例如,get_products_task并用@celery_task. 然后您的 /get-products 端點函式將確定它希望在未來多少秒內運行 celery 任務并相應地安排它。例如:
@celery_task
get_products_task():
with app.app_context(): # if an application context is required
...
@app.route('/get-products')
def get_products():
task = get_products_task.apply_async(countdown=120)
return render_template('schedule_get_products_template.html'), 202
#return '/get-products has been scheduled!', 202
如果有時要立即呼叫 /get_products 端點,那么它的邏輯確實應該分解為一個單獨的函式,例如get_products_logic:
def get_products_logic():
"""
The actual logic for getting products.
The assumption is that an application context exists, if necessary.
"""
...
@celery_task
def get_products_task():
with app.app_context(): # if an application context is required
get_products_logic()
@app.route('/get-products')
def get_products():
get_products_logic()
return reneder_template('get_products_template.html'), 200
@app.route('/schedule-get-products')
def schedule_get_products():
task = get_products_task.apply_async(countdown=120)
return render_template('schedule_get_products_template.html'), 202
#return '/get-products has been scheduled!', 202
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/368787.html
