默认情况下,Celery任务的参数可以接受基本类型,列表和字典作为参数并返回值。
但是,如果我想发送和返回更复杂的值怎么办?我想使用类似Python 3.7的数据类作为参数和返回值。因为我使用的是Python 3.6,所以我使用的是数据类的反向移植,但是据我所知,这几乎是同一回事。
当我尝试发送或返回数据类实例时,我得到一个错误,该对象不是JSON可序列化的...这是正确的:JSON序列化器不知道如何处理类似的事情。
那么有一种方法可以使用自定义JSON序列化程序,该序列化程序可以将数据类实例作为参数并返回值?
答案 0 :(得分:1)
您可以执行以下两项操作之一:(1)您可以通过设置task_serializer
来使用pickle
serializer for celery或(2)编写自己的set of serialization/deserialization functions for json。上面链接中的示例可以向您展示如何编写自己的序列化器。
n.b。使用pickle
确实会带来一些安全问题,但是只要您只信任生产者就可以了。