首页 文章

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

提问于
浏览
0

我有两个不同配置的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 回答

  • 1

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

    1.每个 Worker 都在听不同的队列

    $ 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')
    
    1. call task by name并将应用代码分开,形成文档:
    from celery.execute import send_task
    send_task("tasks.add", args=[2, 2], kwargs={})
    <AsyncResult: 373550e8-b9a0-4666-bc61-ace01fa4f91d>
    

相关问题