【发布时间】:2014-11-04 17:07:51
【问题描述】:
我正在尝试找到一种能够从 django 管理员打开/关闭 celery 任务的方法。这主要是为了在服务关闭或有计划的维护期时禁用调用外部服务的任务。
对于我的定期任务,这很容易,尤其是使用 django-celery。但是对于按需调用的任务,我遇到了一些麻烦。目前,我正在探索仅在 TaskControl 模型中存储各种任务的开/关状态,然后在任务执行开始时检查该状态,如果状态为 False,则返回 None。由于每次任务开始时都会进行所有额外的数据库查找,这让我感到很脏。我可以使用不是 db 的缓存后端,但是为这些少数键/值对添加缓存似乎有点矫枉过正。
在models.py中
# this is a singleton model. singleton code bits omitted for brevity.
class TaskControl(models.Model):
some_status = models.BooleanField(default=True)
# more statuses
在tasks.py中
@celery.task(ignore_result=True)
def some_task():
task_control = TaskControl.objects.get(pk=1)
if not task_control.some_status:
return None
# otherwise execute task as normal
有什么更好的方法来做到这一点?
【问题讨论】:
标签: python django celery django-celery