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

Python 如何检查芹菜结果后端是否工作,python,redis,celery,Python,Redis,Celery,我用的是芹菜配redis 当前redis用作代理和结果后端 BROKER_TRANSPORT = 'redis' BROKER_URL = 'redis://domain:8888/0' CELERY_RESULT_BACKEND = 'redis://domain:8888/0' 我想澄清几件事 使用结果后端的好处是什么。我是说我用它能得到什么 我怎么能看到它的工作。我的意思是会有东西存储在redis中。Wll表示存储是永久性的。我怎么能对此提出质疑?存储会随着时间的推移而增长吗 我能用芹菜

我用的是芹菜配redis

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

BROKER_TRANSPORT = 'redis'
BROKER_URL = 'redis://domain:8888/0'
CELERY_RESULT_BACKEND = 'redis://domain:8888/0'
我想澄清几件事

  • 使用结果后端的好处是什么。我是说我用它能得到什么
  • 我怎么能看到它的工作。我的意思是会有东西存储在redis中。Wll表示存储是永久性的。我怎么能对此提出质疑?存储会随着时间的推移而增长吗
  • 我能用芹菜花监测结果吗

  • 结果后端就是它听起来的样子,它所做的只是存储任务的结果

    假设您有一个实际返回值的任务

    @task
    def sum(x, y):
        return x + y
    
    在某个时候,您可以将此任务称为。如果没有结果后端,get()将抛出一个错误(或者一个警告,我忘了是哪个)。如果您确实有一个结果后端(并且假设已正确配置),
    task.get()
    将轮询您的redis后端,从与
    task
    关联的
    task\u id
    中获取结果,然后通过指定的序列化程序将其返回给您

    from tasks import sum
    
    task = sum.delay(3, 4)
    task.get()
    
    您可以看到,只需对发送给代理的任务调用
    get()
    (并等待完成),它就可以工作。您可以阅读更多有关使用的信息


    原则上,您可以从redis cli轮询您的redis数据库,但我认为没有理由这样做。通过转到一个实际任务详细视图并选中“基本任务选项”表下的“结果”字段,可以查看flower中的结果。e、 g.

    谢谢你,我明白了。有一件事我还不清楚,芹菜在哪里储存了所有的信息,比如任务id,任务是由哪个工人执行的,等等。它是否在Redis中。这个信息是永久性的吗>,因为我看到如果我重新启动芹菜花,那么任务选项卡中的所有任务都会消失。看起来信息不是持久的是的,它都存储在代理中。在您的特定情况下,这似乎是一个redis数据库,它是一个内存中的数据库。这些信息确实不是持久性的(按设计!)如果您想持久化您的redis数据库,请从中阅读如何做到这一点。如果持久性将成为您用例的一个重要部分,那么您可能需要寻找一个更健壮的代理,比如RabbitMQ,它更为复杂,但允许队列中的数据在突然关闭时保留。您认为我在任务执行代码的数据库中手动存储我的任务状态以查看发生的事件的完整历史记录有意义吗?这样,如果我需要从日志消息中检查一些任务id,那么我可以查看相关步骤,数据库中的结果等直接决定它是否有意义完全取决于您,因为您了解自己的需求和目标。也就是说,这是我的0.02美元。如果您不打算在代码中实际使用结果,那么使用结果后端是没有意义的,特别是当唯一的后端用于定期交叉引用日志时。您可以将结果记录在任务中,而不是将其与任务id一起返回(请参阅)。Redis是轻量级的,所以我想说,保持这种方式!