【问题标题】:Can I use dataclasses (or similar) as arguments and return values for Celery tasks?我可以使用数据类(或类似的)作为 Celery 任务的参数和返回值吗?
【发布时间】:2018-11-21 16:38:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: celery celery-task python-dataclasses


    【解决方案1】:

    您可以执行以下两种操作之一:(1) 您可以通过设置 task_serializer 设置来使用 pickle serializer for celery,或者 (2) 编写自己的 set of serialization/deserialization functions for json。上面链接中的示例可以向您展示如何编写自己的序列化程序。

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

    【讨论】:

    • 有人为数据类编写了特定的序列化程序吗?询问任何人(不是特别是此答案的作者)
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多