如何定期安排任务django celery
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 + 的结果(一个随机整数)。我如何重新计算 add 的结果,使其值每 30 分钟更新一次?
我找到了这个来源:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html,但我仍然对如何使用它感到困惑。
根据您引用的文档,看起来这是一种方式:
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)
},
}
这是一个使用 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 文档:
- 配置消息队列(Redis可以作为消息队列使用)
- 运行 芹菜工人
- 运行一个芹菜节拍实例
# 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 + 的结果(一个随机整数)。我如何重新计算 add 的结果,使其值每 30 分钟更新一次?
我找到了这个来源:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html,但我仍然对如何使用它感到困惑。
根据您引用的文档,看起来这是一种方式:
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)
},
}
这是一个使用 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 文档:
- 配置消息队列(Redis可以作为消息队列使用)
- 运行 芹菜工人
- 运行一个芹菜节拍实例