[pyar] ejecutar workers con celery

Ezequiel Golub ezequiel.golub en gmail.com
Mie Dic 17 17:24:11 ART 2014


Para "callbacks" tenes 2 opciones:

1- Definir una clase que encapsule tu task que defina un handler

from celery import Task
class DebugTask(Task):
    abstract = True

    def after_return(self, *args, **kwargs):
        print('Task returned: {0!r}'.format(self.request)

@app.task(base=DebugTask)def add(x, y):
    return x + y


ver: http://celery.readthedocs.org/en/latest/userguide/tasks.html#handlers

2- Usar la opcion de link cuando llamas al task:

Callbacks can be added to any task using the link argument to apply_async:

add.apply_async((2, 2), link=other_task.s())

The callback will only be applied if the task exited successfully, and it
will be applied with the return value of the parent task as argument.

ver: http://celery.readthedocs.org/en/latest/userguide/canvas.html#callbacks

El Wed Dec 17 2014 at 11:41:24, Javier Marcon (<javiermarcon en gmail.com>)
escribió:

> El 16/12/14 a las 17:44, Ale escibió:
>
> Gracias, yo tengo app1 que recibe datos y llama en paralelo
>> asincronicamente a app2, app3 y app4 y cuando app2, app3 y app4 terminan de
>> procesar cada uno los datos que recibieron de app1, le devuelven el
>> resultado a app1. Una vez que app1 recibe todos los resultados, muestra el
>> conjunto de resultados. Para eso quiero setear un worker en app2, app3 y
>> app4, llamado a cada uno de esos workers desde app1. El tema es que no
>> encuentro como coordinar todo usando celery y rabbitmq para que sea
>> escalable.
>>
>
>
>  app2, app3, app4 son modulos o funciones en python que los podes
> convertir en tareas de celery? Por que si es así, podrías hacer lo que está
> descripto acá
> http://celery.readthedocs.org/en/latest/userguide/canvas.html#groups
>
>  >>> from celery import group
> >>> from proj.tasks import app2, app3, app4
>
>  >>> group(app2.s(...), app3.s(...), app4.s(...))
>  ...resultado de cada ejecución
>
>  Fijate que con celery podes diseñar el workflow de cada una de las
> tareas utilizando las primitivas que te provee.
>
>   Me parece que lo mejor es implementarlo haciendo que celery use http
> callback tasks para lamar a mis aplicaciones, pero no encontré como hacerlo
> de forma completa, el ejemplo de
> github.com/celery/celery/blob/master/examples/httpexample/README.rst me
> dice como manejarlo con un worker, pero yo quiero hacer muchos requests
> asincronicos al mismo tiempo a distintas páginas y obtener todos los
> resultados en forma asincronica para procesarlos despues.
>
> Gracias,
>
> Javier.
>  _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20141217/d6c5665b/attachment.html>


More information about the pyar mailing list