我有两个具有不同配置的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应用程序。
未运行回调任务。我想这是因为它使用了不同的应用实例?
重要提示:这两项任务都是针对不同的工作人员远程执行的!这就是我有两个应用程序实例的原因之一。
答案 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>