将Celery任务直接插入Redis

fzsnzjdm  于 2022-12-17  发布在  Redis
关注(0)|答案(2)|浏览(170)

我有一个Erlang系统,我希望这个系统能够在另一个基于Python的系统上触发Celery任务,它们共享同一个主机,Celery使用Redis作为代理。
是否可以直接将Celery的任务插入Redis(在我的例子中,从Erlang),而不是使用Celery API?

68bkxrlz

68bkxrlz1#

是的,你可以直接将任务插入到redis或者任何你正在使用的celery后端。
您必须匹配celery序列化格式(默认情况下是JSON格式),并确定它要插入到哪些键。所使用的键结构没有明确的文档说明,但源代码的this part是一个很好的起点。
您还可以使用redis monitor命令来真实的观察celery使用了哪些键。

x6492ojm

x6492ojm2#

根据Celery文档中的任务消息定义,消息正文具有以下格式(对于版本5.2):

body = (
    object[] args,
    Mapping kwargs,
    Mapping embed {
        'callbacks': Signature[] callbacks,
        'errbacks': Signature[] errbacks,
        'chain': Signature[] chain,
        'chord': Signature chord_callback,
    }
)

因此,要触发一个任务,您应该将一条消息的主体如下所示放入Celery后端的队列中:

[
    ['arg1', 'arg2'],  # positional arguments for the task
    {'kwarg1': 'val1', 'kwarg2': 'val2'},  # keyword arguments for the task
    {'callbacks': None, 'errbacks': None, 'chain': None, 'chord': None}
]

相关问题