Django 架构:我应该在哪里为所有用户安排 Celery Beat 定期任务?

Django Architecture: Where should I schedule a Celery Beat Periodic Task for ALL users?

我有一个 django-celery-beat 周期性任务,需要在每个星期的每个星期一为每个用户 运行。我不确定创建此任务的正确位置是第一次安排它。

我知道可以使用 PeriodicTaskInterval 在特定代码中的任何位置创建每个用户的 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).