Django 架构:我应该在哪里为所有用户安排 Celery Beat 定期任务?
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",)
注意:如果您尚未在项目中设置芹菜设置。
关注这个link
需要说明的是,您不需要为 100 个用户创建 100 个任务。您创建了 1 个为每个用户执行 X 的任务。事实上,你为 "every user" 做这件事 relevant/has 对任务定义没有影响。
就这样:
@task
def task_foo():
"""Do `bar` to every user."""
users = get_user_model().objects.all()
for user in users:
do_bar(user)
如果您真的想为每个用户创建 1 个任务,而不是调用 do_bar()
,您可以调用一个单独的任务,例如task_bar.d(user)
.
我有一个 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",)
注意:如果您尚未在项目中设置芹菜设置。 关注这个link
需要说明的是,您不需要为 100 个用户创建 100 个任务。您创建了 1 个为每个用户执行 X 的任务。事实上,你为 "every user" 做这件事 relevant/has 对任务定义没有影响。
就这样:
@task
def task_foo():
"""Do `bar` to every user."""
users = get_user_model().objects.all()
for user in users:
do_bar(user)
如果您真的想为每个用户创建 1 个任务,而不是调用 do_bar()
,您可以调用一个单独的任务,例如task_bar.d(user)
.