[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