如何检查芹菜结果后端是否正常工作

Kar*_*arl 5 python redis celery

我正在使用带有redis的芹菜.

当前的redis用作代理和结果后端.

BROKER_TRANSPORT = 'redis'
BROKER_URL = 'redis://domain:8888/0'
CELERY_RESULT_BACKEND = 'redis://domain:8888/0'
Run Code Online (Sandbox Code Playgroud)

我想澄清一些事情

  1. 使用结果后端有什么好处.我的意思是通过使用它我会得到什么
  2. 我怎么能看到它的工作原理.我的意思是将某些东西存储在redis中.存储是永久性的.我该如何查询?存储会随着时间的推移而增长吗?
  3. 我可以用芹菜花监测结果后端的东西

Tht*_*htu 6

结果后端正是它听起来的样子,它只是存储来自任务的结果.

假设你有以下任务实际返回一个值.

@task
def sum(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

在某些时候,你称之为此任务.如果你没有结果后端,get()将抛出一个错误(或警告,我忘了哪个).如果你有一个结果后端(并假设它已正确配置),task.get()将轮询你的redis-backend以获得task_id相关的结果task,然后通过你指定的任何序列化程序将它返回给你.

from tasks import sum

task = sum.delay(3, 4)
task.get()
Run Code Online (Sandbox Code Playgroud)

您可以看到它只通过调用get()(并等待完成)您已发送给代理的任务来工作.您可以阅读有关使用官方文档中的芹菜结果的更多信息.

你原则上可以从redis-cli中调查你的redis数据库,但是我没有理由这样做.您可以通过转到其中一个实际任务详细信息视图并选中"基本任务选项"表下的"结果"字段来查看花中的结果.例如http://flower.myserver.com/task/

  • 是的,它全部存储在经纪人中。在您的具体情况下,这似乎是一个 redis 数据库,它是一个内存数据库。此信息确实不是持久的(按设计!)如果您想持久保存您的 redis 数据库,请从 [有关 redis-peristence 的 redis 文档](http://redis.io/topics/坚持)。如果持久性将成为您用例的重要组成部分,您可能需要研究更强大的代理,例如 RabbitMQ,它涉及更多,但允许在突然关闭时保留队列中的数据。 (2认同)
  • 因为您了解自己的需求和目标是什么,是否有意义完全取决于您。就是说,这是我的$ 0.02。如果您不打算在代码中实际使用结果,则没有必要使用结果后端,尤其是当唯一的用途是定期交叉引用日志时。您可以改为从任务中记录结果,而不是将结果与任务ID一起返回(请参阅[有关记录的celery文档](http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging) 。)Redis是轻量级的,所以我要说,保持这种状态! (2认同)