<p>芹菜经纪人充当一个信息存储库,并将其发布给订阅这些信息的一个或多个员工</p>
<p>所以:芹菜会将消息发送给代理(rabbitmq、redist、芹菜本身通过django db等等),这些消息由一个工人按照代理的协议检索,该协议会记住它们(通常它们是持久的,但可能依赖于您的代理),并由您的工人执行。</p>
<p>任务结果在正在执行的工作任务上可用,您可以配置到<a href="http://docs.celeryproject.org/en/latest/configuration.html#task-result-backend-settings" rel="noreferrer">store those results</a>的位置,并可以使用<a href="http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-result-backends" rel="noreferrer">this method</a>检索它们。</p>
<p>您可以发布带有芹菜的任务,将参数传递给您的“receiver函数”(您定义的任务,文档中有一些<a href="http://docs.celeryproject.org/en/latest/userguide/tasks.html" rel="noreferrer">examples</a>,通常您不想在这里传递大的东西(比如queryset),而只需要允许您在执行任务时检索所需内容的最小信息。</p>
<p>一个简单的例子是:</p>
<p>你注册了一个任务</p>
<pre><code>@task
def add(x,x):
return x+y
</code></pre>
<p>从另一个模块调用:</p>
<pre><code>from mytasks import add
metadata1 = 1
metadata2 = 2
myasyncresult = add.delay(1,2)
myasyncresult.get() == 3
</code></pre>
<p><strong>编辑</strong></p>
<p>在您的编辑之后,我看到您可能希望构建来自其他来源(芹菜除外)的消息,您可以看到<a href="http://docs.celeryproject.org/en/latest/internals/protocol.html" rel="noreferrer">here</a>消息格式,它们默认为与该格式相关的pickled对象,因此您将这些消息发布到rabbitmq代理的正确队列中,并且您可以从您的工作人员检索它们。</p>