[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