在我的某个应用程序中,我希望限制用户每个日历月仅进行一次特定数量的文档转换,并希望通知他们他们所做的转化以及他们在该日历月中仍可进行的转化次数
所以我做了类似下面的事情。
class CustomUser(models.Model):
# user fields here
def get_converted_docs(self):
return self.document_set.filter(date__range=[start, end]).count()
def remaining_docs(self):
converted = self.get_converted_docs()
return LIMIT - converted
现在,使用芹菜在后台完成文档转换。因此,可能存在转换任务未决的情况,因此在这种情况下,上述方法会让用户进行额外转换,因为暂挂任务未包含在计数中。
如何在此处获取特定CustomUser
对象的待处理任务数?
好,所以我尝试了以下内容:
from celery.task.control import inspect
def get_scheduled_tasks():
tasks = []
scheduled = inspect().scheduled()
for task in scheduled.values()
tasks.extend(task)
return tasks
这给了我一个计划任务的列表,但现在上面提到的任务arg的所有值都是unicode
,如下所示:
u'args': u'(<Document: test_document.doc>, <CustomUser: Test User>)'
有没有一种方法可以解码回原始的django
对象,以便我可以过滤它们?
答案 0 :(得分:2)
将文档的状态存储在其他位置,不要检查队列。 为此创建单独的模型,或者例如。在您的文档模型上有一个状态,至少独立于您的队列。这应该有几个好处: