gpt4 book ai didi

python - celery : understanding the big picture

转载 作者:行者123 更新时间:2023-12-04 13:04:14 24 4
gpt4 key购买 nike

Celery 似乎是一个很棒的工具,但我很难理解各种 Celery 组件是如何协同工作的:

  • worker
  • 应用
  • 任务
  • 消息代理(如 RabbitMQ)

  • 据我了解,命令行:
    celery -A not-clear-what-this-option-is worker

    应该运行某种 celery “工作服务器”,它本身需要连接到代理服务器(我不太确定为什么需要这么多服务器)。

    然后在任何 python 代码中,一些任务可以通过实例化应用程序发送给工作人员:
    app = Celery('my_module', broker='pyamqp://guest@localhost//')

    然后通过以下方式使用此应用程序装饰功能:
    @app.tasks
    def my_func():
    ...

    这样“my_func()”现在可以被称为“my_func.delay()”以异步方式运行。

    以下是我的问题:
  • 调用 my_func.delay() 时会发生什么?哪个服务器先与哪个对话?和发送什么?
  • 将 celery 命令的“-A”放在后面的选项是什么?这真的需要吗?
  • 假设我有一个进程 X,它实例化一个 Celery 应用程序来启动任务 A,并假设我有另一个进程 Y 想知道 X 启动的任务 A 的状态。我假设 Y 有一种方法可以这样做,但是我不知道怎么做我想 Y 应该创建自己的 Celery 应用程序实例。但是之后:
  • 在 Y 的 celery 应用程序中调用什么函数来获取此信息(以及进程 Y 中任务 A 的“标识符”是什么)?
  • 这在通信方面是如何工作的,即请求何时通过 Broker,何时到达 worker(s)?

  • 如果有人有关于这些问题的一些信息,我将不胜感激。我打算在 Django 项目中使用 Celery,其中对服务器的一些请求可以触发各种耗时的任务,和/或查询先前启动的任务的状态(待处理、完成、错误等...)。

    最佳答案

    关于经纪人:
    经纪人的主要作用是调解客户和 worker 之间的沟通
    基本上,在您的工作人员运行时正在生成和处理大量信息
    处理这些信息是经纪人的职责
    例如您可以配置 redis,以便在运行进程时服务器关闭时不会丢失任何信息
    worker :
    您可以将 worker 视为独立于您的应用程序的实例,它只会执行您委托(delegate)给它的任务
    关于任务状态:
    有多种方法可以咨询 celery 以了解任务的状态,但我不建议根据此构建应用程序逻辑
    如果您想使用任务获取进程的输出并将其转换为另一个进程的输入,我建议您使用队列

  • 运行任务 A,并在完成之前将结果对象插入队列
  • 任务 B 将监听队列并处理出现的任何内容

  • 命令:
    在终端上,您可以通过运行 celery -h 更详细地了解每个参数的含义。或 celery --help但该参数基本上指定了您打算运行的 celery 实例。所以通常这个参数会指示你配置并打算执行的实例在哪里可以找到
    usage: celery [-h] [-A APP] [-b BROKER] [--result-backend RESULT_BACKEND]
    [--loader LOADER] [--config CONFIG] [--workdir WORKDIR]
    [--no-color] [--quiet]
    我希望这可以为到达这里的人提供初步概述

    关于python - celery : understanding the big picture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638206/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com