如何定期安排django芹菜任务

时间:2015-08-26 01:20:46

标签: python django celery

# In tasks.py file
from __future__ import absolute_import

from celery import shared_task

@shared_task
def randadd(x):
    y = randint(0,9)
    return x + y

# In views.py 
    context = {
        'add': tasks.randadd(5)
    }
def home(request):
    global context
    return render(request, "home.html", context)

# In home.html
<h1>{{ add }}</h1>

在home.html中,我看到了5 +(随机int)的结果。如何重新计算添加的结果,使其值每30分钟更新一次?

我能够找到这个来源:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html,但我仍然对如何使用它感到困惑。

2 个答案:

答案 0 :(得分:4)

这是使用Redis作为数据存储的shell实现。它假设Redis已使用默认设置在本地计算机上安装并运行。

# tasks.py
import redis
from celery import shared_task

@shared_task
def update_number():
    r = redis.StrictRedis()
    r.set('my_number', randint(0,9))


# views.py
import redis

def home(request):
    r = redis.StrictRedis()
    context = {
        'add': r.get('my_number')
    }
    return render(request, 'home.html', context)


# settings.py
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'context': {
        'task': 'tasks.update_number',
        'schedule': crontab(minute=30),
    }
}

请务必查看以下芹菜文档:

  • 配置消息队列(Redis可用作消息队列)
  • 经营芹菜工人
  • 运行芹菜节拍实例

答案 1 :(得分:0)

根据您引用的文档,看起来这是一种方式:

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'context': {
        'task': 'randadd',
        'schedule': crontab(minute=30),
        'args': 5
        # or if that doesn't work try:
        #'args':(5)
    },
}

这是另一个:

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    'context': {
        'task': 'tasks.add',
        'schedule': timedelta(minutes=30),
        'args': 5
        #but the last line still might be:
        #'args':(5)
    },
}