celery - 我可以使用数据类(或类似的)作为 Celery 任务的参数和返回值吗?
问题描述
默认情况下,Celery 任务的参数可以接受原始类型、列表和字典作为参数和返回值。
但是如果我想发送和返回更复杂的值呢?我想使用 Python 3.7 的数据类作为参数和返回值。由于我使用的是 Python 3.6,因此我使用的是数据类的反向移植,但据我所知,这几乎是一回事。
当我尝试发送或返回一个数据类实例时,我收到一个错误,指出该对象不是 JSON 可序列化的......这是正确的:JSON 序列化程序不知道如何处理类似的事情。
那么有一种方法可以使用自定义的 JSON 序列化器,它可以将数据类实例作为参数处理并返回值?
解决方案
您可以做以下两件事之一:(1)您可以通过设置设置来使用pickle
celery 的序列化程序,或者(2)为 jsontask_serializer
编写您自己的序列化/反序列化函数集。上面链接中的示例可以向您展示如何编写自己的序列化程序。
注意,使用pickle
确实会带来一些安全问题,但只要您只有受信任的生产者,那应该没问题。
推荐阅读
- salt-stack - 存储库未签名以在 Ubuntu 上安装软件包
- java - 如何在我的 Ubuntu 服务器中启用会话
- python - 带有 CMake 和 SetupTools 的 Python 2.7 C++ 扩展?
- c++ - ks.h、ksmedia.h 和 ksproxy.h 的依赖关系错误
- .net - c# automapper 嵌套对象到平面对象列表
- android-studio - 在片段而不是活动中传递无线电组的上下文?
- java - 为什么当我的结果集类型仅向前时我可以使用 first() 方法?
- php - Laravel - 如何正确覆盖异常处理行为?
- design-patterns - 如何在第一个数字之后用 0 替换所有数字?
- spring-cloud - Spring Cloud Stream Kafka DLQ 通过 Retryable/Recover