[英]Django Celery Beat for periodic task in Django with Celery is not working
[英]Django Architecture: Where should I schedule a Celery Beat Periodic Task for ALL users?
我有一個django-celery-beat
定期任務,需要在每周的每個星期一為每個用戶運行。 我不確定第一次創建此任務的正確位置是什么。
我了解可以使用PeriodicTask
和Interval
在特定代碼中的任何位置創建每用戶的celery任務,但是由於此操作是針對每個用戶運行的,因此我不確定它應該去哪里或如何實例化它。
periodic_tasks.py
# Run every time at 7:30 am on monday.
@periodic_task(run_every=crontab(hour=7, minute=30, day_of_week=1))
def test_hulk_task():
"""First hulk periodic task for testing."""
logger.log('info', {'event': 'test_hulk_periodic_task'})
在設置中
CELERY_IMPORTS = ("path.to.periodic_tasks",)
注意:如果您尚未在項目中設置芹菜設置。 點擊此鏈接
需要明確的是,您無需為100個用戶創建100個任務。 您創建1個為每個用戶執行X任務。 您為“每個用戶”執行此操作的事實不相關/對任務定義沒有影響。
做就是了:
@task
def task_foo():
"""Do `bar` to every user."""
users = get_user_model().objects.all()
for user in users:
do_bar(user)
如果您確實想為每個用戶創建一個任務,則可以調用一個單獨的任務,例如task_bar.d(user)
,而不用調用do_bar()
task_bar.d(user)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.