2015-07-29 2 views
2

У меня есть сельдерей задача:Celerybeat выполнить задачу

@app.task(ignore_result=True) 
def update_task(): 
    .... 

добавляю эту задачу celerybeat в настройках:

CELERYBEAT_SCHEDULE = { 
    "update-task-on-mathmod.org": { 
     "task": "manager.update_task", 
     "schedule": timedelta(seconds=30), 
    } 
} 

Мои проекты Структура:

enter image description here

Установка является в settings.py задайте задачу в application.py. Как начать периодическую задачу?

Я бегу celery beat -A application. Выход:

celery beat v3.1.18 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://guest:**@localhost:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> celery.beat.PersistentScheduler 
    . db -> celerybeat-schedule 
    . logfile -> [stderr]@%DEBUG 
    . maxinterval -> now (0s) 
[2015-07-30 11:27:16,470: DEBUG/MainProcess] Setting default socket timeout to 30 
[2015-07-30 11:27:16,470: INFO/MainProcess] beat: Starting... 
[2015-07-30 11:27:16,482: DEBUG/MainProcess] Current schedule: 
<Entry: celery.backend_cleanup celery.backend_cleanup() <crontab: 0 4 * * * (m/h/d/dM/MY)> 
[2015-07-30 11:27:16,483: DEBUG/MainProcess] beat: Ticking with max interval->5.00 minutes 
[2015-07-30 11:27:16,495: DEBUG/MainProcess] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL. See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2013 GoPivotal, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'connection.blocked': True, u'authentication_failure_close': True, u'basic.nack': True, u'consumer_priorities': True, u'consumer_cancel_notify': True, u'publisher_confirms': True}, u'platform': u'Erlang/OTP', u'version': u'3.2.4'}, mechanisms: [u'AMQPLAIN', u'PLAIN'], locales: [u'en_US'] 
[2015-07-30 11:27:16,497: DEBUG/MainProcess] Open OK! 
[2015-07-30 11:27:16,498: DEBUG/MainProcess] beat: Waking up in 5.00 minutes 
+0

Запуск celerybeat, как вы управляете вашими работниками. – user2097159

+0

@ user2097159 Вы имеете в виду 'celery -A application worker'? – Wolkodav

+0

Сортировка выглядит примерно так: «celery beat -A application» – user2097159

ответ

1

Для того, чтобы обработать «запланированные» задачи, которые необходимо выполнить «сельдерей удар» , как @ user2097159 сказал.

celery -A <project> beat -l debug 

Для запуска рабочих для обычных задач (задача, которую выполнить асинхронной) необходимо запустить работник

celery -A <project> worker -l debug 

-l МПОСА срубы уровня равно отлаживать, хорошо для развития. Хорошей практикой является оставить сельдерей для задания имен задач вместо заданного имени = «что-то». Когда рабочий запустится, вы увидите сообщение с зарегистрированными задачами, убедитесь, что задачи были зарегистрированы сельдереем. Как только ваши задачи будут отправлены работнику или бит, вы увидите запись в журнале на своей консоли.

+0

вот проблема ... Задача не записана в 'CELERYBEAT_SCHEDULE' ... – Wolkodav

+0

Хорошо, что вы смогли это найти. –

+0

Похоже, вы используете «неправильное» имя для своей задачи. Менеджер задачи должен быть «manager.applications.update_task», а не «manager.update_task». Вы можете подтвердить это, введя в оболочку django импорт задачи и проверить атрибут name. 'from manager.application import update_task' то сделайте это ' print update_task.name' –

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