2016-04-25 98 views
2

我在我的django项目中使用芹菜来运行定期任务。继芹菜网站上的标准教程,这里是我的项目结构 项目芹菜定期任务不启动

|_ settings.py 
|_ __init__.py 
|_ celery_app.py (instead of celery.py) 
|_ app 
    |_ tasks.py 

settings.py中相关部分看起来是这样的 -

CELERY_RESULT_BACKEND = "amqp" 
CELERY_IMPORTS = ["app.tasks"] 

CELERY_ALWAYS_EAGER = True  

CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend' 
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' 

CELERY_DB_REUSE_MAX = 1 

CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 
CELERY_TIMEZONE = 'America/New York' 

CELERYBEAT_SCHEDULE = { 
    'test_task': { 
     'task': 'tasks.test_task', 
     'schedule': timedelta(seconds=5), 
     'args':(), 
    }, 
} 

celery_app.py看起来是这样的 -

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

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 
app = Celery('project') 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

tasks.py看起来像这样 -

from __future__ import absolute_import 
from celery.utils.log import get_task_logger 
from celery import task 
from celery_app import app 

logger = get_task_logger(__name__) 

@app.task 
def test_task(): 
    for i in range(0, 4): 
     logger.debug("celery test task") 

当我运行芹菜工作者,我可以看到我的任务被发现 -

$ python manage.py celery -A project worker --loglevel=DEBUG --app=celery_app:app 

-------------- [email protected] v3.1.19 (Cipater) 
---- **** ----- 
--- * *** * -- Darwin-15.4.0-x86_64-i386-64bit 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   project:0x10d5b9a10 
- ** ---------- .> transport: amqp://sgcelery1:**@localhost:5672/sgceleryhost 
- ** ---------- .> results:  djcelery.backends.database:DatabaseBackend 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . celery.backend_cleanup 
    . celery.chain 
    . celery.chord 
    . celery.chord_unlock 
    . celery.chunks 
    . celery.group 
    . celery.map 
    . celery.starmap 
    . app.tasks.test_task 

[2016-04-24 23:54:55,452: INFO/MainProcess] Connected to amqp://sgcelery1:**@127.0.0.1:5672/sgceleryhost 
[2016-04-24 23:54:55,471: INFO/MainProcess] mingle: searching for neighbors 
[2016-04-24 23:54:56,481: INFO/MainProcess] mingle: all alone 
[2016-04-24 23:54:56,497: WARNING/MainProcess] [email protected] ready. 

当我运行的节拍,这表明从settings.py正被摄取的任务,但它从来没有真正运行。

$ python manage.py celery -A project beat --app=celery_app:app --loglevel=DEBUG 

[2016-04-24 23:55:04,059: DEBUG/MainProcess] Current schedule: 
<ModelEntry: test_task tasks.test_task(*[], **{}) {4}> 

我在这里错过了什么?

+0

即使在计划任务没有得到回升 - '蟒蛇manage.py芹菜-A项目工人-B --loglevel = DEBUG --app = celery_app:app' – DancingJohn

回答

0

尝试设置CELERY_ALWAYS_EAGER = False

设置CELERY_ALWAYS_EAGER = True使得任务同时被用于运行无芹菜。通过将它切换到False将使芹菜拍起来并定期运行。当您不想芹菜处理任务时,False开关用于开发模式。运行工人,一起跳动

结帐的文档here

+0

'CELERY_ALWAYS_EAGER = False'没有任何区别。 – DancingJohn

+0

芹菜是否在您的机器上运行?芹菜节拍需要运行以执行定期任务。 –

+0

如果您在原始问题的底部看到,我正在运行两者。工人,然后击败。两者都通过manage.py。或者还有别的东西可以运行? – DancingJohn