我有一个Erlang系统,我希望这个系统能够在另一个基于Python的系统上触发Celery任务,它们共享同一个主机,Celery使用Redis作为代理。是否可以直接将Celery的任务插入Redis(在我的例子中,从Erlang),而不是使用Celery API?
68bkxrlz1#
是的,你可以直接将任务插入到redis或者任何你正在使用的celery后端。您必须匹配celery序列化格式(默认情况下是JSON格式),并确定它要插入到哪些键。所使用的键结构没有明确的文档说明,但源代码的this part是一个很好的起点。您还可以使用redis monitor命令来真实的观察celery使用了哪些键。
monitor
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} ]
2条答案
按热度按时间68bkxrlz1#
是的,你可以直接将任务插入到redis或者任何你正在使用的celery后端。
您必须匹配celery序列化格式(默认情况下是JSON格式),并确定它要插入到哪些键。所使用的键结构没有明确的文档说明,但源代码的this part是一个很好的起点。
您还可以使用redis
monitor
命令来真实的观察celery使用了哪些键。x6492ojm2#
根据Celery文档中的任务消息定义,消息正文具有以下格式(对于版本5.2):
因此,要触发一个任务,您应该将一条消息的主体如下所示放入Celery后端的队列中: