2012-08-12 66 views
2

我發佈了一個問題:How to execute a command at exact time once a day in Django?如何在Django應用程序中使用芹菜執行任務?

我有我的回答是,芹菜是做最簡單的選擇,但現在我有一個關於芹菜另一個問題:

from celery.schedules import crontab 

CELERYBEAT_SCHEDULE = { 
    # Executes every Monday morning at 7:30 A.M 
    'every-monday-morning': { 
     'task': 'tasks.add', 
     'schedule': crontab(hour=7, minute=30, day_of_week=1), 
     'args': (16, 16), 
    }, 
} 

我有關於三個問上面的代碼即:

  • 我必須執行execute_command(User, command)方法。我希望此方法將在給定的預定時間執行。

  • 如果我想在7:30 AM but every weekdays更改計劃,該怎麼辦?

  • 那麼args呢。在我的情況下,我應該從args通過User and command的值。或者我可以簡單地通過task鍵?

我剛剛讀了芹菜的文檔,但沒有得到我的答案。你能幫我嗎?

回答

4

您是否找到Celery periodic tasks documentation

  • 您必須使用方法的標識符來註冊調度程序條目。如果您的execute_command任務位於名爲foobar的模塊中,則CELERYBEAT_SCHEDULE結構的task值應爲foobar.execute_command

    芹菜會爲您導入任務,只要import foobar.execute_command可以工作。

  • 檢查celery.schedule.crontab API;以下應在上午07:30平日執行:

    crontab(minute=30, hour=7, day_of_week=’mon-fri’) 
    
  • 請記住,這個任務將被異步執行。您在計劃此任務時無法查詢數據庫對象,並且在任務被調用時仍希望它仍在那裏。

    因此,你應該只通過在保持不變蟒蛇值,並有你的任務連接到數據庫,並根據您在傳遞參數看東西。

    如果這個任務是永遠只能去執行一個特定用戶的任務,然後通過所有方式傳遞該用戶的標識符(用戶標識,電子郵件,無論您可以用來從數據庫中查找用戶)。