我试图找到一种方法,可以从django管理员打开/关闭芹菜任务。这主要是为了禁用在这些服务关闭或具有计划的维护期时调用外部服务的任务。关掉芹菜任务
对于我的定期任务,这很容易,尤其是在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
什么是更好的方式来做到这一点?
与数字1在一起。性能命中最小,实现也很简单。感谢您的建议! – ecline6 2014-09-13 23:58:42