[pyar] Celery chains con muchas subtareas

Juan Carizza juan.carizza en gmail.com
Mie Mar 4 10:19:41 -03 2020


Hola, me imagino que en tu local no podes reproducirlo. No se si esta
bueno, pero podrias modificar el codigo en `/app/.heroku/python/lib/
python2.7/site-packages/kombu/messaging.py` y logear el contenido de body
logger.error(body) Por otro lado el issue dice RuntimeError: maximum
blabla. Y en tu error la excepción no es RuntimeError (que corresponde a un
maximum recursion error) sino que la excepción es EncodeError como si tu
objeto no puede ser serializado. ¿Vos tenes definido alguna property o algo
en el objeto que querés serializar?

El mié., 4 de mar. de 2020 a la(s) 10:03, Francisco Roldán (
franciscoproldan en gmail.com) escribió:

> Buen día lista.
>
> Estoy teniendo un problema usando Celery chains con celery==3.2.1,
> Django==1.11.21 y python 2.7.
>
> La cadena se genera desde una tarea que la arma dependiendo una lista de
> datos a procesar, se paginan esos datos según un valor por página y arma la
> cadena con n cantidad de subtasks.
> Venía funcionando bien hasta que empezamos a tener un error al generarse
> la cadena: EncodeError: maximum recursion depth exceeded while calling a
> Python object
>
>
> Traceback (most recent call last):
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
>     R = retval = fun(*args, **kwargs)
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/trace.py", line 438, in __protected_call__
>     return self.run(*args, **kwargs)
>   File "/app/.heroku/python/lib/python2.7/site-packages/sentry_sdk/integrations/celery.py", line 120, in _inner
>     reraise(*exc_info)
>   File "/app/.heroku/python/lib/python2.7/site-packages/sentry_sdk/integrations/celery.py", line 115, in _inner
>     return f(*args, **kwargs)
>   File "/app/core/tasks_decorators.py", line 27, in _decorator
>     return function(*args, **kwargs)
>   File "/app/core/tasks_decorators.py", line 14, in _decorator
>     return function(*args, **kwargs)
>   File "/app/lmsplatform/tasks.py", line 659, in send_phishing_campaign_task
>     chain(subtasks).apply_async()
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/canvas.py", line 251, in apply_async
>     return _apply(args, kwargs, **options)
>   File "/app/.heroku/python/lib/python2.7/site-packages/sentry_sdk/integrations/celery.py", line 74, in apply_async
>     return f(*args, **kwargs)
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/builtins.py", line 293, in apply_async
>     tasks[0].apply_async(**options)
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/canvas.py", line 251, in apply_async
>     return _apply(args, kwargs, **options)
>   File "/app/.heroku/python/lib/python2.7/site-packages/sentry_sdk/integrations/celery.py", line 74, in apply_async
>     return f(*args, **kwargs)
>   File "/app/.heroku/python/lib/python2.7/site-packages/tenant_schemas_celery/task.py", line 27, in apply_async
>     return super(TenantTask, self).apply_async(args, kwargs, *arg, **kw)
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/task.py", line 573, in apply_async
>     **dict(self._get_exec_options(), **options)
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/base.py", line 354, in send_task
>     reply_to=reply_to or self.oid, **options
>   File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/amqp.py", line 310, in publish_task
>     **kwargs
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/messaging.py", line 165, in publish
>     compression, headers)
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/messaging.py", line 241, in _prepare
>     body) = dumps(body, serializer=serializer)
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/serialization.py", line 164, in dumps
>     payload = encoder(data)
>   File "/app/.heroku/python/lib/python2.7/contextlib.py", line 35, in __exit__
>     self.gen.throw(type, value, traceback)
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/serialization.py", line 59, in _reraise_errors
>     reraise(wrapper, wrapper(exc), sys.exc_info()[2])
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/serialization.py", line 55, in _reraise_errors
>     yield
>   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/serialization.py", line 164, in dumps
>     payload = encoder(data)
>   File "/app/.heroku/python/lib/python2.7/site-packages/anyjson/__init__.py", line 141, in dumps
>     return implementation.dumps(value)
>   File "/app/.heroku/python/lib/python2.7/site-packages/anyjson/__init__.py", line 87, in dumps
>     return self._encode(data)
>   File "/app/.heroku/python/lib/python2.7/json/__init__.py", line 244, in dumps
>     return _default_encoder.encode(obj)
>   File "/app/.heroku/python/lib/python2.7/json/encoder.py", line 207, in encode
>     chunks = self.iterencode(o, _one_shot=True)
>   File "/app/.heroku/python/lib/python2.7/json/encoder.py", line 270, in iterencode
>     return _iterencode(o, 0)
> EncodeError: maximum recursion depth exceeded while calling a Python object
>
>
> El error es muy similar al reportado en el siguiente issue [1], probé con
> el workaround propuesto en el mismo pero no me dió resultado.
>
> ¿Alguien tuvo el mismo problema, alguna idea para dónde puedo encarar?
>
>
> Gracias!
>
> Francisco
>
>
>
> [1] https://github.com/celery/celery/issues/1078
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> 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/20200304/702bf27e/attachment-0001.html>


Más información sobre la lista de distribución pyar