繁体   English   中英

如何从models.py导入功能以运行cron作业?

[英]how to import function from models.py to run a cron job?

我正在尝试使用芹菜做一份cron作业。 问题是我需要在models.py中运行一个函数,这听起来很奇怪,但是让我在代码中进行演示。

class Post(models.Model):
rank_score = models.FloatField(default= 1)
image = models.ImageField(upload_to='images',blank=True, null=True)


def get_score(self):
    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)

)

在这里,我需要每秒在后台运行一次get_score。 因此对于celery.py,我正在导入此功能。

from  main.models import get_score

logger = get_task_logger(__name__)

@periodic_task(
    run_every=(crontab(minute='*/15')),
    name="task_get_score",
    ignore_result=True
)

def task_get_score():
    get_score()
    logger.info("running cron job")

然后说从main.models import get_score ImportError:无法导入名称get_score

还是我需要在utils文件夹中的rank.py中运行公式函数

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)

这是我应该执行cron工作的人吗?

首先在脚本中设置djnago项目,然后使用get_score方法

import os
import sys
import django
sys.path.append('/var/www/projects/project_name/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
from django.conf import settings

from  main.models import get_score

logger = get_task_logger(__name__)

@periodic_task(
    run_every=(crontab(minute='*/15')),
    name="task_get_score",
    ignore_result=True
)

def task_get_score():
    get_score()
    logger.info("running cron job")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM