芹菜任务结果不与 rpc 保持一致

Posted

技术标签:

【中文标题】芹菜任务结果不与 rpc 保持一致【英文标题】:Celery task results not persisted with rpc 【发布时间】:2015-12-31 05:02:40 【问题描述】:

我一直在尝试通过将结果持久化到队列中来将 Celery 任务结果路由到另一个进程,并且另一个进程可以从队列中选择结果。所以,已经将 Celery 配置为 CELERY_RESULT_BACKEND = 'rpc',但是 Python 函数返回的值仍然没有持久化到队列中。

不确定是否需要任何其他配置或代码更改。请帮忙。

下面是代码示例:

芹菜.py

from __future__ import absolute_import

from celery import Celery

app = Celery('proj',
         broker='amqp://',
         backend='rpc://',
         include=['proj.tasks'])

# Optional configuration, see the application user guide.
app.conf.update(
    CELERY_RESULT_BACKEND = 'rpc',
    CELERY_RESULT_PERSISTENT = True,
    CELERY_TASK_SERIALIZER = 'json',
    CELERY_RESULT_SERIALIZER = 'json'
)

if __name__ == '__main__':
    app.start()

tasks.py

from proj.celery import app

@app.task
def add(x, y):
    return x + y

运行 Celery 为

celery worker --app=proj -l info --pool=eventlet -c 4

【问题讨论】:

您如何检查结果是否未持久化? 启动 Celery 后,在 rabbitmq 管理界面中验证 - 没有队列绑定到 celeryresults 通道。 【参考方案1】:

通过使用 Pika(AMQP 0-9-1 协议的 Python 实现 - https://pika.readthedocs.org)将结果发布回 celeryresults 频道解决

【讨论】:

但是 Pika 并没有解决“任务结果不使用 rpc 持久化”的问题,对吧? 我的意思是 rpc 结果后端仍然没有像预期的那样持久化结果。

以上是关于芹菜任务结果不与 rpc 保持一致的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中等待芹菜任务的结果

如何禁用芹菜任务结果记录?

从未知任务中检索芹菜中“task_id”的结果

如何在任务中获取芹菜结果模型(使用 django-celery-results)

芹菜结果禁用?

我应该如何在芹菜中实现任务集的回调