Venga, con este post vamos a subir un poco el nivel de nuestras aplicaciones!
Una de las problemáticas que te encuentras al programar con django es que el envío de mails es horrorosamente lento, el proceso de enviar el mail es relativamente rápido, pero no termino de entender el porqué en general es lento (la conexión y sobre todo la desconexión). Para ello una de las soluciones que más o menos ya había aplicado a mi manera con command hacía que la ejecución cada minuto se solapase con la ejecución de minutos anteriores. Hice una ñapa hace unos días hasta encontrar una solución un poco más elegante. Aquí os la traigo! :D
Hay varios posts que hablan de celery, incluso el libro que uso de consulta “Django 3 by Example”, hablan de usar @tank, pero esta opción está descontinuada para la versión 5, así que aquí veremos como hacerlo con Celery 5. Toda la info la he sacado de éste post.
Configurar e instalar celery y rabbitmq en nuestro proyecto/sistema
Lo primero será instalar celery en nuestro proyecto
laura@melatonina:~/dev/whistleblowerbox$ source venv/bin/activate (venv) laura@melatonina:~/dev/whistleblowerbox$ pip install celery
A continuación instalamos rabbitmq en nuestro sistema. Rabbitmq es el servicio que encolará las tareas que le pasemos y luego las ejecutará en background
root@melatonina:~# apt -y install rabbitmq-server
Ahora en el fichero settings.py de nuestro proyecto añadimos
(venv) laura@melatonina:~/dev/whistleblowerbox$ vi wbox/settings.py CELERY_BROKER_URL = 'amqp://localhost'
A continuación, en el mismo directorio donde se encuentra el fichero settings.py vamos a crear uno que se …