使用 rpc:// 作为 celery 应用程序的后端时的问题(而 amqp:// 后端工作)

pyD*_*Dev 5 python rabbitmq celery

我有一个简单的 celery 应用程序,有两个任务,a_func()和b_func(). 启动 celery worker 后,我调用a_func.apply_async(), 和a_func,当在 worker 上运行时调用b_func.apply_async().

使用“amqp://”作为后端时,一切正常。但是,当使用'rpc://'作为后端时,我遇到了问题。我正在尝试获取任务的状态和返回值。对于a_func()任务,没有问题。然而,b_func()因为我得到了state = 'PENDING'永远,并且get()永远被困住了。

我正在使用:芹菜版本 4.3.0。rabbitmq 版本 3.5.7 作为代理。蟒蛇 2.7。ubuntu 版本 16.0.4 LTS。

工人命令:

celery -A celery_test worker --loglevel=inf
Run Code Online (Sandbox Code Playgroud)

芹菜应用:

app = Celery('my_app',
             backend='rpc://',
             broker='pyamqp://guest@localhost/celery',
             include=['tasks'])
Run Code Online (Sandbox Code Playgroud)

a_func 和 b_func 任务:

@task
def a_func():
    print "A"
    b_func.apply_async()
    return "A"

@task
def b_func():
    print "B"
    return "B"
Run Code Online (Sandbox Code Playgroud)