gpt4 book ai didi

python - celery 任务返回 pydantic BaseModel 子类列表 : not json serializable

转载 作者:行者123 更新时间:2023-12-05 01:30:48 25 4
gpt4 key购买 nike

考虑这段代码:

from pydantic import BaseModel

class MyModel(BaseModel):
x: int

appc = Celery(...)

@appc.task(bind=True)
def mytask(self):
return [MyModel(x=0)]

res = mytask.delay().get() # ERROR

错误是:kombu.exceptions.EncodeError: TypeError('Object of type MyModel is not JSON serializable')

我尝试使用 kombu 序列化器或 pydantic 编码器,但我真的不明白哪里出了问题。

最佳答案

我使用 pickle 序列化以一种简单的方式解决了它:

appc = Celery(
name=__name__,
# ...
)


class CeleryConfig:
task_serializer = "pickle"
result_serializer = "pickle"
event_serializer = "json"
accept_content = ["application/json", "application/x-python-serialize"]
result_accept_content = ["application/json", "application/x-python-serialize"]


appc.config_from_object(CeleryConfig)

通过这种方式,任务和结果使用 pickle 序列化,并且如此处所示 (https://pydantic-docs.helpmanual.io/usage/exporting_models/#pickledumpsmodel),Pydantic 模型可以使用 pickle 毫无问题地转储和加载。

这样:

res = mytask.delay().get()

不仅有效,而且 res 它确实是一个真正的 List[model] 所以即 res[0].x == 0是有效且真实的。

关于python - celery 任务返回 pydantic BaseModel 子类列表 : not json serializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66802978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com