簡體   English   中英

如何定期安排任務Django芹菜

[英]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文檔:

  • 配置消息隊列(Redis可用作消息隊列)
  • 經營芹菜工人
  • 運行芹菜節拍實例

根據您引用的文檔,看起來這是一種方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM