如何使用哪个函数运行django cron作业

时间:2016-01-17 07:10:09

标签: python django cron

我有一个需要cron工作的应用程序。具体来说,对于排名部分我需要我的文件同步运行,所以分数在后台改变。这是我的代码。 我的utils文件夹中有rank.py

from datetime import datetime, timedelta
from math import log


epoch = datetime(1970, 1, 1)


def epoch_seconds(date):
    td = date - epoch
    return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)


def score(ups, downs):
    return ups - downs


def hot(ups, downs, date):
    s = score(ups, downs)
    order = log(max(abs(s), 1), 10)
    sign = 1 if s > 0 else -1 if s < 0 else 0
    seconds = epoch_seconds(date) - 1134028003
    return round(sign * order + seconds / 45000, 7)

我在Post模型下有两个函数,在models.py

def get_vote_count(self):

        vote_count = self.vote_set.filter(is_up=True).count() - self.vote_set.filter(is_up=False).count()
        if vote_count >= 0:
            return "+ " + str(vote_count)
        else:
            return "- " + str(abs(vote_count))

    def get_score(self):
        """ 
        :return: The score calculated by hot ranking algorithm
        """
        upvote_count = self.vote_set.filter(is_up=True).count()
        devote_count = self.vote_set.filter(is_up=False).count()
        return hot(upvote_count, devote_count, self.pub_date.replace(tzinfo=None))

问题是我不确定如何为此运行cron作业。我见过http://arunrocks.com/building-a-hacker-news-clone-in-django-part-4/,看起来我需要创建另一个文件和另一个函数来使整个事情运行起来。一次又一次./但是什么功能?如何在我的代码中使用cron作业?我看到有很多应用程序允许我这样做,但我只是不确定我需要使用哪个功能以及我应该如何使用。我的猜测是我需要在models.py中运行get_score函数但是如何....

1 个答案:

答案 0 :(得分:1)

你可以考虑芹菜和兔子。

这个想法是:在你的应用程序中,你创建一个名为tasks.py的文件,然后你输入代码:

# tasks.py
from celery import task

@task
def your_task_for_async_job(data):
    # todo

只需调用该函数即可为您完成异步工作..

Here是Celery的文档,您还可以找到如何使用django等设置它。

希望,这有助于