39đź‘Ť
Add CELERY_IMPORTS
to your settings.py:
CELERY_IMPORTS = ('testapp.tasks',)
Import all the tasks in testapp.tasks.__init__
file
Then Celery will import all tasks from testapp.tasks folder and name them as they are
- Returning form errors for AJAX request in Django
- Combining multiple Django templates in a single request
- How to pass data between django views
- How can I tell Django templates not to parse a block containing code that looks like template tags?
11đź‘Ť
For any one who stumbles here looking for similar problem solution.
In my case it was switching from old module bases INSTALLED_APPS
setting to a new AppConfig based configuration.
New applications should avoid default_app_config. Instead they should require the dotted path to the appropriate AppConfig subclass to be configured explicitly in INSTALLED_APPS.
To fix this you should change the way you feed packages to celery, as stated here in the 2248 Celery issue:
from django.apps import apps
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()]
Instead of the old Celery 3 way:
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
- ProgrammingError: relation "django_session" does not exist
- Error loading MySQLdb module: libmysqlclient.so.20: cannot open shared object file: No such file or directory
- Django: Check for related objects and whether it contains data
5đź‘Ť
I had the same issue with django 1.4.1 celery 3.0.9 and fixed it by naming the task.
@task() -> @task(name=’testapp.tasks.add’)
- Datetime.strptime () throws 'does not match format' error
- "<Model> with this <field> already exist" on PUT call – Django REST Framework
- Extending generic view classes for common get_context_data
- Django i18n: how to not translate the admin site?
3đź‘Ť
In my case, I couldn’t figure out the problem until I tried to import the tasks in shell (python
or python manage.py shell
).
>>> from project_name.tasks import task_add
- How to restrict Django Rest Framework browsable API interface to admin users
- Django — async_to_sync vs asyncio.run
- Django filter datetime base on date only
- Efficient function to retrieve a queryset of ancestors of an mptt queryset
2đź‘Ť
I’m pretty sure you have to import the “Celery app instance” and declare a task like this:
from project_name.celery import app
@app.task
def video_process_task(video_id):
pass
note that there’s a celery.py file in the project_dir/project_name folder, which declares the celery instance, like this:
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
app = Celery('project_name')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
as instructed in the official documentation.
also, you must register the task, in one of these three ways:
- the CELERY_IMPORTS variable in Django project’s settings.py file as in dgel’s answer
- passing
bind=True
to the decorator like:@app.task(bind=True)
- if you set autodiscovery for celery like it is done above in the line
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
, each Django application’s folder can contain a tasks.py file, and the tasks declared inside it will be automatically registered
note that changes to the tasks REQUIRE A CELERY RESTART to take effect
- Django KeyError: "'__name__' not in globals"
- Proper declaration of an empty Django PostgreSQL JSONField default value in migration file
- What's equivalent to Django's auto_now, auto_now_add in SQLAlchemy?
- Tracking changes to Django Model instances
- Django User model email field: how to make it mandatory
0đź‘Ť
Adding on to Umair A.’s answer, there was an ImportError
exception in my tasks.py file that was causing Celery to not register the tasks in the module. All other module tasks were registered correctly.
This error wasn’t evident until I tried importing the Celery task within a Python Shell. I fixed the bad import statement and then the tasks were successfully registered.
- Using django_filters on graphene queries while not using Relay
- Django rest framework create user with password
- Does changing a django models related_name attribute require a south migration?
- Performance, load and stress testing in Django