2

默认情况下,Celery 任务的参数可以接受原始类型、列表和字典作为参数和返回值。

但是如果我想发送和返回更复杂的值呢?我想使用 Python 3.7 的数据类作为参数和返回值。由于我使用的是 Python 3.6,因此我使用的是数据类的反向移植,但据我所知,这几乎是一回事。

当我尝试发送或返回一个数据类实例时,我收到一个错误,指出该对象不是 JSON 可序列化的......这是正确的:JSON 序列化程序不知道如何处理类似的事情。

那么有一种方法可以使用自定义的 JSON 序列化器,它可以将数据类实例作为参数处理并返回值?

4

1 回答 1

2

您可以做以下两件事之一:(1)您可以通过设置设置来使用picklecelery 的序列化程序,或者(2)为 jsontask_serializer编写您自己的序列化/反序列化函数集。上面链接中的示例可以向您展示如何编写自己的序列化程序。

注意,使用pickle确实会带来一些安全问题,但只要您只有受信任的生产者,那应该没问题。

于 2018-11-22T05:39:04.983 回答