【发布时间】:2017-07-04 15:50:46
【问题描述】:
我整天都在与这个任务作斗争。
我有一个 Django 应用程序。我将 Celery 用于异步任务。偶尔,我想创建一个周期性任务。任务运行的次数未知,但稍后需要将其删除。所以任务可能是这样的:
@shared_task
def foobar_task(id):
if this_should_run:
do_task()
else:
PeriodicTask.objects.get(name='{} task'.format(id)).delete()
我的应用正在运行。我在 Docker 容器中运行 celery beat,使用 celery --app=myproject beat --loglevel=info --scheduler=django 运行。我有另一个容器运行标准 celery worker。
所以现在我想动态地创建我的周期性任务。我有一个触发类似这样的视图/API 端点:
schedule, _ = IntervalSchedule.objects.get_or_create(every=15, period=IntervalSchedule.SECONDS)
PeriodicTask.objects.create(interval=schedule,
name='{} task'.format(id),
task='myapp.tasks.foobar_task')
在 Django admin 中,我可以看到已创建周期性任务。但是,查看 celery 容器和 celery beat 容器的日志,没有任何反应。
为什么 celery beat 没有发现有新的周期性任务?我不想每次创建或删除新任务时都必须重新启动 celery beat。
注意:我使用的是 Django 1.11.2、PostgreSQL、Celery 4.0.2、Django Celery Beat 1.0.1。
【问题讨论】:
标签: django celery celerybeat