python - Celery+Django -- KeyError Unregistered task -


i'm close getting celery work django+docker-compose project, have problem worker never recognizes task given it. basic idea have function insertintodatabase called task:

myapp/tasks.py:

@task(name='tasks.db_ins') def db_ins_task(datapoints, user, description):     utils.db.databaseinserter import insertintodatabase     insertintodatabase(datapoints, user, description) 

and in views.py, do:

from .tasks import db_ins_task ... db_ins_task.delay(datapoints, user, description) 

datapoints list of dictionaries , user , description strings. problem is, when celery worker container starts, db_ins_task never found 1 of listed tasks, when try upload website, following sort of error:

worker_1   | [2015-09-25 19:38:00,205: error/mainprocess] received unregistered task of type u'tasks.db_ins'. worker_1   | message has been ignored , discarded. worker_1   |  worker_1   | did remember import module containing task? worker_1   | or maybe using relative imports? worker_1   | please see http://bit.ly/glye1c more information. ... worker_1   | traceback (most recent call last): worker_1   |   file "/usr/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 455, in on_task_received worker_1   |     strategies[name](message, body, worker_1   | keyerror: u'tasks.db_ins' 

i've been trying worker recognize task, including adding setting settings.py:

celery_imports = ('myapp.tasks',) 

i added debug logging tasks.py make sure wasn't being missed, , can confirm every time try run task, logger reports tasks.py being run. reference, here's worker container in docker-compose.yml:

worker:   build: .   links:     - redis   command: bash -c "celery -a myproj worker --app=taskman.celery --loglevel=debug" 

celery.py in separate app named taskman. not doing right causing error tasks?

in question show starting worker with:

celery -a myproj worker --app=taskman.celery --loglevel=debug 

now, problem -a , --app mean same thing. suggests me you've been waffling between using myproj or taskman.celery holder of celery app. worker uses taskman.celery, because testing i've found if combination of -a or --app given single worker invocation last 1 used.

this being said, there 1 way can imagine problem happening. if myapp/tasks.py file gets task decorator myproj.celery.app rather taskman.celery.app, you'd registering tasks wrong app.


Comments