Celery子任务绑定到远程执行的不同应用程序

时间:2014-02-07 20:05:14

标签: python celery

我有两个具有不同配置的Celery应用程序实例,比方说app1和app2。 app1中的任务在远程worker1上执行。 app2中的任务在远程worker2上执行。

我正在尝试使用app2中的子任务从app1执行任务,但子任务没有被执行。

我的代码类似于:

import app1.tasks as app1_tasks
import app2.tasks as app2_tasks

reference = 'foo'

success_callback = app2_tasks.bar.subtask(reference)

app1_tasks.foo.apply_async(
    args=(
        1, 2, 3, reference,
    ),
    link= success_callback,
)

有没有办法让这项工作?我需要有两个不同的Celery应用程序。

未运行回调任务。我想这是因为它使用了不同的应用实例?

重要提示:这两项任务都是针对不同的工作人员远程执行的!这就是我有两个应用程序实例的原因之一。

1 个答案:

答案 0 :(得分:1)

您可以将应用分开,让他们通过以下方式进行沟通:

1.每个工作人员都在听不同的队列

$ celery worker -Q feeds

2.使用某些routing method向特定应用发送消息,来自docs的手动示例:

>>> from feeds.tasks import import_feed
>>> import_feed.apply_async(args=['http://cnn.com/rss'],
...                         queue='feed_tasks',
...                         routing_key='feed.import')

3. call task by name并将应用代码分开,形成文档:

from celery.execute import send_task
send_task("tasks.add", args=[2, 2], kwargs={})
<AsyncResult: 373550e8-b9a0-4666-bc61-ace01fa4f91d>