JORGE JORGE

Django Celery Redis
tareas asíncronas con django

Date of published: 20/03/2019
Published by: JORGE JORGE

Para el siguiente tutorial necesitaremos instalar redis ya se usando docker o el siguiente comando apt-get install redis-server 

Luego vamos a instalar django en un entorno virtual (si no sabes como hacerlo te recomiendo leer entornos virtuales)

Además necesitamos las siguientes dependencias

celery==4.2.1
django-celery==3.2.2
django-redis==4.10.0
redis==3.2.1

Ahora vamos al setting.py e incluiremos en las aplicaciones instalada a celery y agregaremos las siguientes configuraciones

INSTALLED_APPS = [
...
'celery',
...
]

3.png  3.png 

veamos la estructura del proyecto un segundo para comprender la siguiente explicación 

--root

--app

--name_app

----- __init__.py

----- celery.py

----- settings.py

En el fichero init vamos a pegar __init__.py

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ('celery_app',)

en el fichero celery.py pegaremos el siguiente código

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trading.settings')
app = Celery('app_name', include=['apps.core.tasks'])

app.config_from_object('django.conf:settings')
app.conf.update(
    BROKER_URL = 'redis://localhost:6379/0',
)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.CELERY_ALWAYS_EAGER = True
app.conf.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True

Por último solo falta ejecutar los worker que resolveran las tareas asincronas, para ello procedemos a abrir el terminal y activar el entorno virtual donde ejecutaremos el comando: 

celery worker -A app_name -l info