将芹菜任务直接插入 Redis 中



我有一个Erlang系统。 我希望这个系统能够在另一个基于 Python 的系统上触发 Celery 任务。 它们共享同一个主机,Celery 正在使用 Redis 作为其代理。

是否可以将 Celery的任务直接插入 Redis 中(在我的例子中,来自 Erlang(,而不是使用 Celery API?

是的,您可以将任务直接插入 redis 或您与芹菜一起使用的任何后端。

您必须匹配 celery 序列化格式(默认情况下为 JSON(,并确定它要插入到哪些键。使用的密钥结构没有明确记录,但源代码的这一部分是一个很好的起点。

您还可以使用 redismonitor命令实时观察芹菜使用哪些键。

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

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

因此,要触发任务,您应该将带有如下正文的消息放入 Celery 后端的队列(表示为 Python 数据结构(:

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

最新更新