У меня есть Django + сельдерей в Heroku, и сельдерея настроен как:Джанго + Сельдерей в Heroku не выполняет асинхронную задачу
import djcelery
djcelery.setup_loader()
BROKER_URL = "django://" # tell kombu to use the Django database as the message queue
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_ALWAYS_EAGER = False
CELERY_TIMEZONE = 'Europe/Madrid'
Я 2 задачи, определенной в tasks.py
, одной периодической и другой, который выполняется на асинхронные вызовы:
@task
def test_one_shot():
print "One shot"
@periodic_task(run_every=crontab(minute="*/5"))
def test_periodic():
print "Periodic"
Heroku конфигурируется с основным веб-работника и ДОПОЛНИТЕЛЬНОЕ работника:
web: gunicorn config.wsgi:application ON
worker: python manage.py celery worker -B -l info ON
С помощью этой установки, я бегу test_one_shot
задачу следующим образом:
test_one_shot.apply_async(eta=datetime.now()+timedelta(minutes=2))
И хотя, как представляется, как зарегистрировано в журнале Heroku:
Received task: test.tasks.test_one_shot[f29c609d-b6e8-45d4-808d-2ca690f029af] eta:[2016-08-07 00:09:30.262362+02:00]
Он никогда не выполняет. С другой стороны, периодическая задача test_periodic
выполняется, как ожидалось. Что я делаю не так?
Спасибо!
EDIT: Выполнение задачи не появлялось в журналах из-за проблемы с датой времени. Однако, когда задача программно называется, она никогда не выполняется.
вам нужно отладить. может быть, вы получаете ошибку внутри задачи, и она не будет показывать ошибки в задачах async. – levi
@levi Как бы вы его отлаживали? Я уже тестирую функцию, которая является только заявлением на печать и непосредственно смотрит на журналы героику работника сельдерея (где ничего не появляется). – kahlo
вот способ отладки задачи сельдерея http://docs.celeryproject.org/en/latest/tutorials/debugging.html – levi