UDATE3: encontró el problema. Vea la respuesta a continuación.Django Apio tutorial no devuelve resultados
ACTUALIZACIÓN2: Parece que tuve que lidiar con un problema automático de nomenclaturas y importaciones relativas ejecutando el tutorial de djcelery a través del shell manage.py, ver debajo. Todavía no funciona para mí, pero ahora recibo nuevos mensajes de error de registro. Vea abajo.
ACTUALIZACIÓN: He añadido el registro en la parte inferior de la publicación. Parece que la tarea de ejemplo no está registrada?
Post original:
Estoy intentando conseguir django-apio en funcionamiento. No pude resolver el ejemplo.
He instalado RabbitMQ con éxito y se fue a través de los tutoriales y sin problemas: http://www.rabbitmq.com/getstarted.html
Luego trató de pasar por el tutorial djcelery.
Cuando corro python manage.py celeryd -l info
consigo el mensaje: [Tareas] - app.module.add [2011-07-27 21:17:19, 990: ADVERTENCIA/MainProcess] apio @ secuoya ha comenzado.
Así que se ve bien. Pongo esto en la parte superior de mi configuración del archivo:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
añaden estos para mis aplicaciones instaladas:
'djcelery',
aquí está mi archivo tasks.py en la carpeta de tareas de mi aplicación:
from celery.task import task
@task()
def add(x, y):
return x + y
he añadido esto a mi archivo django.wsgi:
os.environ["CELERY_LOADER"] = "django"
Luego entré en esto en la línea de comandos:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff)
>>> result.ready()
False
lo que parece que funcionó, pero aquí está el problema:
>>> result.result
>>> (nothing is returned)
>>> result.get()
Cuando pongo en result.get() simplemente se cuelga. ¿Qué estoy haciendo mal?
ACTUALIZACIÓN: Esto es lo que ejecuta el registrador en el primer plano dice cuando inicio el servidor trabajador:
No handlers could be found for logger “multiprocessing”
[Configuration]
- broker: amqplib://[email protected]:5672/
- loader: djcelery.loaders.DjangoLoader
- logfile: [stderr]@INFO
- concurrency: 4
- events: OFF
- beat: OFF
[Queues]
- celery: exchange: celery (direct) binding: celery
[Tasks]
- app.module.add
[2011-07-27 21:17:19, 990: WARNING/MainProcess] [email protected] has started.
C:\Python27\lib\site-packages\django-celery-2.2.4-py2.7.egg\djcelery\loaders.py:80: UserWarning: Using settings.DEBUG leads to a memory leak, neveruse this setting in production environments!
warnings.warn(“Using settings.DEBUG leads to a memory leak, never”
entonces cuando pongo en el comando:
>>> result = add(4,4)
Esto parece en el registro de errores:
[2011-07-28 11:00:39, 352: ERROR/MainProcess] Unknown task ignored: Task of kind ‘task.add’ is not registered, please make sure it’s imported. Body->”{‘retries’: 0, ‘task’: ‘tasks.add’, ‘args’: (4,4), ‘expires’: None, ‘ta’: None
‘kwargs’: {}, ‘id’: ‘225ec0ad-195e-438b-8905-ce28e7b6ad9’}”
Traceback (most recent call last):
File “C:\Python27\..\celery\worker\consumer.py”,line 368, in receive_message
Eventer=self.event_dispatcher)
File “C:\Python27\..\celery\worker\job.py”,line 306, in from_message
**kw)
File “C:\Python27\..\celery\worker\job.py”,line 275, in __init__
self.task = tasks[self.task_name]
File “C:\Python27\...\celery\registry.py”, line 59, in __getitem__
Raise self.NotRegistered(key)
NotRegistered: ‘tasks.add’
¿Cómo puedo obtener th ¿la tarea debe registrarse y manejarse correctamente? Gracias.
ACTUALIZACIÓN 2:
Este enlace sugiere que el error no registrado puede ser debido a desajustes nombre de la tarea entre el cliente y el trabajador - http://celeryproject.org/docs/userguide/tasks.html#automatic-naming-and-relative-imports
salido del manage.py shell y entró en una cáscara de pitón y ingresó lo siguiente:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result.ready()
False
>>> result.result
>>> (nothing returned)
>>> result.get()
(it just hangs there)
así que estoy obteniendo el mismo comportamiento, pero nuevo mensaje de registro. Desde el registro, parece que el servidor está funcionando pero no va a alimentar el resultado de vuelta:
[2011-07-28 11:39:21, 706: INFO/MainProcess] Got task from broker: app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3]
[2011-07-28 11:39:21, 706: INFO/MainProcess] Task app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3] succeed in 0.04600000038147s: 8
Así que el servidor tiene la tarea y se calcula la respuesta correcta, pero no va a enviar de nuevo? ¿Por qué no?
¿Estás usando Windows? Se han recibido informes de que los resultados no funcionan en Windows para Apio 3 – asksol
Sí, estoy usando Windows. Estoy a punto de volver a visitar el proyecto que utiliza rabbitmq y apio. Voy a tener en cuenta tus comentarios entonces. En general, he estado muy feliz con los dos. – sequoia