2014-01-30 123 views
3

我遇到了一些問題,需要定期運行Celery 3.1.8,Django 1.6.1和RabbitMQ。我對目前的文檔有些困惑,因爲據我所知django-celery不再需要Celery和Django一起運行。我有一種感覺,我沒有正確地運行工作人員,但是在搜索SO和Google搜索解決方案之後,我需要幫助。任何人都可以用這個指向正確的方向嗎?芹菜和Django的定期任務

settings.py(不知道我需要這個,因爲我有我的任務@periodic_task裝飾)

CELERYBEAT_SCHEDULE = { 
    'add-every-30-seconds': { 
     'task': 'tasks.send_test_email', 
     'schedule': datetime.timedelta(seconds=30) 
    }, 
} 

我的應用程序(celery.py)

from __future__ import absolute_import 

import os 
from celery import Celery 
from django.conf import settings 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings') 

app = Celery('app', 
      broker='amqp://', 
      backend='amqp://', 
      include=['app.tasks']) 


app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600, 
    CELERY_TIMEZONE='Europe/Oslo', 
    ) 

if __name__ == '__main__': 
    app.start() 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

週期性任務(任務的.py)

from __future__ import absolute_import 
from celery.task import periodic_task 
import datetime 

@periodic_task(run_every=datetime.timedelta(minutes=1)) 
def send_test_email(): 
    print "This is a periodic task from celery" 

在命令行中,我執行了工人:

celery worker -A app -l info 
celery beat 
+2

所以修修補補各地的之後,我能得到它的工作。問題在於我如何執行工作人員。這樣做的訣竅:**芹菜 - 一個應用程序擊敗** –

+2

你應該添加,作爲一個答案,而不是評論:) – Jonathan

回答

1

一些其他的解決辦法是使用@periodic_taskcelery decorator

from celery.schedules import crontab 

@periodic_task(run_every=crontab(minute=0, hour=1)) 
def my_task(): 
    print 'my_task'