小编Sla*_*wek的帖子

在芹菜中播放消息

我正在使用芹菜,并希望向几个工人发送广播任务.我试着这样做就像在http://docs.celeryproject.org/en/latest/userguide/routing.html#broadcast上描述的那样,所以我用任务创建简单的应用程序:

@celery.task
def do_something(value):
    print value
Run Code Online (Sandbox Code Playgroud)

在应用程序中我做了:

from kombu.common import Broadcast
CELERY_QUEUES = (Broadcast('broadcast_tasks'), )
CELERY_ROUTES = {'my_app.do_something': {'queue': 'broadcast_tasks'}}
Run Code Online (Sandbox Code Playgroud)

然后我试图向工人发送任务:

my_app.do_something.apply_async(['222'], queue='broadcast_tasks')
Run Code Online (Sandbox Code Playgroud)

要么:

my_app.do_something.apply_async(['222'])
Run Code Online (Sandbox Code Playgroud)

但不幸的是,第一种方式任务是"一般"只在一次发送给一个工人 - 所以如果我有两个工人,那么任务就完成一次或第一次和第二次工作.第二种方式我不知道在哪里完成这项任务,因为在任何工人身上都没有结果.也许你的某个人会知道为什么它不像广播一样工作,我在这里做错了什么.在此先感谢您的帮助.

python broadcast celery

5
推荐指数
1
解决办法
2738
查看次数

芹菜,从其他任务调用的任务不起作用

我正在尝试使用 Cellery 进行应用。它应该适用于少数工人,并且不同的工人从不同的队列中消费。我有这样的事情:

@celery.task
def task1():
    do_something()
    task2.delay()

@celery.task
def task2()
    do_something()
Run Code Online (Sandbox Code Playgroud)

所以在worker1上运行的task1应该调用task2,它应该被发送到消耗worker2的队列。问题是它不起作用。我收到了 AsyncResult 的 id,但这个任务的状态一直是 PENDING。当我从 python 控制台手动调用 task2 时,它工作正常。也许我做错了什么,不可能从另一个任务运行一项任务?还有一件事情。Worker1 正在执行 task1 并将 task2 发送到他不消费的队列 - 从这个队列只消费 worker2

python task celery

5
推荐指数
1
解决办法
1342
查看次数

标签 统计

celery ×2

python ×2

broadcast ×1

task ×1