根据用户时间决定使用Celery进行cron作业时间

时间:2016-02-06 00:36:23

标签: django cron celery

我有一个项目,用户决定帖子活动多长时间,所以在一定时间之后帖子会改变状态。

要解决这个问题,至于运行异步任务和性能,我认为最好的选择是使用Celery。

我还没有使用Celery,我只阅读了有关ETA(预计到达时间)和到期的文档,正确here.

我的问题是:

这样做的正确方法(如果可能的话)是什么?

是否建议在模型上使用持续时间字段或日期时间字段(最长持续时间为1天12小时)?

我是否需要为每个帖子或Celery创建一个cron作业才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用Celery,并且有一些方法可以将数据库更新挂钩到Celery计划任务,但是对于显示或未显示过期帖子这样的简单情况可能有点过分。

以下是设置计算属性的简单示例。只需引用计算属性active即可决定是否显示帖子。

import datetime
from django.db import models
from django.utils.timezone import now, localtime

class Post(models.Model):
    created = models.DateTimeField(blank=True)
    title = models.CharField(max_length=100)
    body = models.CharField(max_length=2000)
    expires = models.DateTimeField(blank=True)

    @property
    def active(self):
        return self.expires > localtime(now())

    def save(self, *args, **kwargs):
        self.created = localtime(now())
        self.expires = self.created + datetime.timedelta(hours=36)
        return super(Post, self).save(*args, **kwargs)