# 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,但我仍然对如何使用它感到困惑。
答案 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),
}
}
请务必查看以下芹菜文档:
答案 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)
},
}