python django amazon-ec2 celery

python - Cómo configurar el archivo apiogefig en django



amazon-ec2 celery (1)

Tengo un proyecto Django en un nodo Ubuntu EC2, que he estado usando para configurar un uso asíncrono de Celery . He intentado seguir http://michal.karzynski.pl/blog/2014/05/18/setting-up-an-asynchronous-task-queue-for-django-using-celery-redis/

Pude obtener una tarea básica trabajando en la línea de comando, usando:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery --app=tp.celery:app worker --loglevel=INFO (env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery --app=tp.celery:app worker --loglevel=INFO -------------- celery@ip-172-31-22-65 v3.1.17 (Cipater) ---- **** ----- --- * *** * -- Linux-3.13.0-44-generic-x86_64-with-Ubuntu-14.04-trusty -- * - **** --- - ** ---------- [config] - ** ---------- .> app: tp:0x7f66a89c0470 - ** ---------- .> transport: redis://localhost:6379/0 - ** ---------- .> results: disabled - *** --- * --- .> concurrency: 1 (prefork) -- ******* ---- --- ***** ----- [queues] -------------- .> celery exchange=celery(direct) key=celery

Sin embargo, si ejecuto otros comandos de apio como a continuación, obtengo lo siguiente:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery worker [2015-04-03 13:17:21,553: WARNING/MainProcess] /home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/apps/worker.py:161: -------------- celery@ip-172-31-22-65 v3.1.17 (Cipater) ---- **** ----- --- * *** * -- Linux-3.13.0-44-generic-x86_64-with-Ubuntu-14.04-trusty -- * - **** --- - ** ---------- [config] - ** ---------- .> app: default:0x7f1653eae7b8 (.default.Loader) - ** ---------- .> transport: amqp://guest:**@localhost:5672// - ** ---------- .> results: disabled - *** --- * --- .> concurrency: 1 (prefork) -- ******* ---- --- ***** ----- [queues] -------------- .> celery exchange=celery(direct) key=celery [2015-04-03 13:17:21,571: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

Parece que el apio cree que estoy usando amqp como intermediario, ¡pero estoy usando redis!

En función de que Celery intenta conectarse con el intermediario equivocado , parece probable que el apio no pueda encontrar el archivo de configuración y use el predeterminado.

En la pregunta anterior, recomiendan:

import your celery and add your broker like that : celery = Celery(''task'', broker=''redis://127.0.0.1:6379'') celery.config_from_object(celeryconfig)

¿Dónde haría esto? es mi archivo apio.py (a continuación), lo mismo que una configuración de apio?

/projects/tp/tp/celery.py

from __future__ import absolute_import import os import django from celery import Celery from django.conf import settings # set the default Django settings module for the ''celery'' program. os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''tp.settings'') django.setup() app = Celery(''hello_django'') # Using a string here means the worker will not have to # pickle the object when using Windows. app.config_from_object(''django.conf:settings'') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

tasks.py:

from __future__ import absolute_import from celery import shared_task from django.core.cache import cache @shared_task def tester1(param): return ''The test task executed with argument "%s" '' % param

tp / tp1 / views

@csrf_exempt def tester(request): tester1.delay(''hi'') return HttpResponse(''hTML'')

/etc/supervisor/conf.d/tp-celery.conf

[program:tp-celery] command=/home/ubuntu/.virtualenvs/env1/bin/celery --app=tp.celery:app worker --loglevel=INFO directory=/home/ubuntu/projects/tp user=ubuntu numprocs=1 stdout_logfile=/var/log/celery-worker-out.log stderr_logfile=/var/log/celery-worker-err.log autostart=true autorestart=true startsecs=10 ; Need to wait for currently executing tasks to finish at shutdown. ; Increase this if you have very long running tasks. stopwaitsecs = 600 ; When resorting to send SIGKILL to the program to terminate it ; send SIGKILL to its whole process group instead, ; taking care of its children as well. killasgroup=true

/var/log/celery-worker-out.log

-------------- celery@ip-172-31-22-65 v3.1.17 (Cipater) ---- **** ----- --- * *** * -- Linux-3.13.0-44-generic-x86_64-with-Ubuntu-14.04-trusty -- * - **** --- - ** ---------- [config] - ** ---------- .> app: tp:0x7fa33e424cf8 - ** ---------- .> transport: redis://localhost:6379/0 - ** ---------- .> results: disabled - *** --- * --- .> concurrency: 1 (prefork) -- ******* ---- --- ***** ----- [queues] -------------- .> celery exchange=celery(direct) key=celery [tasks] . testapp.tasks.tester1


No ejecute celery woker solamente celery woker corra como el celery -A tp worker -l info -Tp celery -A tp worker -l info . Tomará la config predeterminada.

Para el celery inspect

celery --app=tp.celery:app inspect active_queues

O simplemente

celery -A tp inspect active_queues