2016-10-26 4 views
1

Я новичок в сельдерей. Я пытаюсь правильно настроить Celery с моим проектом Django. Чтобы проверить, работает ли сельдерей, я создал периодическую задачу, которая должна печатать «периодическая_загрузка» каждые 2 секунды. К сожалению, это не работает, но нет ошибок.Простая периодическая задача в сельдерее не работает, но ошибок нет

Installed RabbitMQ

Project/project/celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

from django.conf import settings # noqa 

app = Celery('project') 

app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

@app.task(bind=True) 
def myfunc(): 
    print 'periodic_task' 

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

Project/project/__init__.py

from __future__ import absolute_import 

from .celery import app as celery_app 

Settings.py

INSTALLED_APPS = [ 
    'djcelery', 
    ...] 
... 
... 

CELERYBEAT_SCHEDULE = { 
    'schedule-name': { 
         'task': 'project.celery.myfunc', # We are going to create a email_sending_method later in this post. 
         'schedule': timedelta(seconds=2), 
         }, 
    } 

А до python manage.py, я бегу celery -A project worker -l info

До сих пор не может видеть любой «periodic_task» печатается в консоли каждые 2 секунды ... Вы знаете, что делать?

EDIT СЕЛЬДЕРЕЯ CONSOLE:

-------------- [email protected]_NB v3.1.23 (Cipater) 
---- **** ----- 
--- * *** * -- Windows-8-6.2.9200 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   dolava:0x33d1350 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  disabled:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . project.celery.debudeg_task 
    . project.celery.myfunc 

EDIT:

После смены рабочего бить, это, кажется, работает. Что-то происходит каждые 2 секунды (сменяется на 5 секунд), но я не вижу результатов задания. (Я могу положить что-нибудь в CELERYBEAT_SCHEDULE, даже неправильный путь, и это не вызывает каких-либо ошибку ..)

Я изменил MyFunc код:

@app.task(bind=True) 
def myfunc(): 
    # notifications.send_message_to_admin('sdaa','dsadasdsa') 
    with open('text.txt','a') as f: 
     f.write('sa') 

Но я не могу видеть text.txt в любом месте ,

> celery -A dolava beat -l info 
celery beat v3.1.23 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://guest:**@localhost:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> djcelery.schedulers.DatabaseScheduler 

    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2016-10-26 17:46:50,135: INFO/MainProcess] beat: Starting... 
[2016-10-26 17:46:50,138: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,433: INFO/MainProcess] DatabaseScheduler: Schedule changed. 

[2016-10-26 17:46:51,433: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,812: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:46:51,864: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:57,138: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:47:02,230: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
+0

ли RabbitMQ сервис работает? –

+0

@ anonymous Да, я думаю, это не сработало, пока я не установил RabbitMQ. Это может быть что-то очевидное, потому что я очень новый и очень запутанный с сельдереем. Я добавил часть консоли сельдерея в нижней части вопроса. –

+0

Также обратите внимание, что при обновлении кода в задаче сельдерея. Вам нужно перезапустить службу сельдерея, чтобы изменения отразились на –

ответ

3

Попробуйте запустить

$ celery -A project beat -l info

+0

Это, похоже, поможет. Я вижу в консоли сельдерея что-то происходит каждые 2 (или изменено на 5) секунд. Проблема в том, что myfunc не имеет никакого эффекта. Я добавил консольный вывод в нижней части вопроса. –

+1

О, я запускаю это вместо рабочего. Когда я попытался запустить обоих рабочих и бить сразу, это сработало. –

Смежные вопросы