[英]How to periodically schedule a task 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 +(隨機整數)的結果。 我將如何重新計算添加結果,以使其每30分鍾更新一次值?
我能夠找到此源: http : //docs.celeryproject.org/en/latest/userguide/periodic-tasks.html ,但是我仍然對如何使用它感到困惑。
這是一個使用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),
}
}
確保檢查以下內容的celery文檔:
根據您引用的文檔,看起來這是一種方法:
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)
},
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.