芹菜:了解大局



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

  • 工人
  • 应用
  • 任务
  • 消息经纪(如兔子)

据我了解,命令行:

celery -A not-clear-what-this-option-is worker

应该运行某种芹菜"工人服务器"本身需要连接到代理服务器(我不确定为什么需要这么多服务器)。

然后在任何Python代码中,可以通过实例化应用程序发送某些任务:

app = Celery('my_module', broker='pyamqp://guest@localhost//')

然后通过以下方式使用此应用程序来装饰功能:

@app.tasks
def my_func():
    ...

,以便现在可以称为" my_func()"为" my_func.delay()"要以异步的方式运行。

这是我的问题:

  • 当调用my_func.delay()时会发生什么?哪个服务器首先与哪个服务器交谈?然后发送什么?
  • 在芹菜命令的" -a"后面有什么选择?这真的需要吗?
  • 假设我有一个进程X,可以实例化芹菜应用程序来启动任务A,并假设我还有另一个过程Y想要知道X启动的任务状态。我假设有一种方法可以做Y所以,但是我不知道如何。我想Y应该创建自己的芹菜应用程序实例。但是之后:
    • 在Y芹菜应用程序中可以调用什么函数以获取此信息(在过程中,任务的"标识符"是什么?
    • )?
  • 这是如何在交流方面起作用的,也就是说,请求何时通过经纪人?

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

关于经纪人:

经纪人的主要角色是调解客户与工人之间的沟通

基本上,当您的工人运行时,正在生成和处理很多信息

照顾这些信息是经纪人的角色

例如。您可以配置redis,以便在运行过程时关闭服务器

时不会丢失信息

工人:

您可以将工人视为独立于您的应用程序的实例,这只会执行您委派给其的那些任务

关于任务的状态:

有多种方法可以咨询芹菜来找出任务的状态,但我不建议根据此

构建您的应用程序逻辑

如果要获取一个进程的输出并将其在另一个任务的输入中转动,我建议您使用队列

  • 运行任务A,然后完成之前,将结果对象插入队列
  • 任务B将听取队列并处理任何出现的事情

命令:

在终端上,您可以通过运行celery -hcelery --help

更详细地看到每个参数的含义

但该参数基本上指定您打算运行的芹菜实例。因此,通常此参数将指示您已配置并打算执行的实例

usage: celery [-h] [-A APP] [-b BROKER] [--result-backend RESULT_BACKEND]
              [--loader LOADER] [--config CONFIG] [--workdir WORKDIR]
              [--no-color] [--quiet]

我希望这可以为那些到达这里的人提供初始概述

芹菜用于使功能在后台运行。想象一下,您有一个可以完成工作的Web API,并返回响应。您知道,这项工作将严重影响API的响应时间。因此,您将把该特定的工作转移到芹菜中,您的API将立即做出反应。影响API表现的某些工作的示例是

  • 路由到电子邮件服务器
  • 路由到SMS网关
  • 数据库备份
  • 链接的数据库操作
  • 文件转换

现在,让我们覆盖芹菜的每个成分。

  • 工人芹菜工人执行工作(功能)。它们是异步的。因此,您将拥有芹菜工人的加工核心数量的两倍。您可以将姓名和任务分配给芹菜工人#

  • 应用程序该应用是您正在从事的项目的名称。您必须在芹菜实例中指定该名称。

  • 任务您需要在后台执行的功能。每个任务芹菜执行都将具有一个任务ID,状态(以及更多)。您可以通过检查特定任务来获得这一点。

  • 消息经纪这些将在后台执行的任务必须从您的Python项目转移到芹菜工人。消息经纪人在这里充当媒介。因此,及其参数的功能将转移给经纪人,从经纪人芹菜将取得执行。

一些代码

celery -A project_name worker_name
celery -A project_name worker_name inspect

在文档中更多docs.celeryproject.org

相关内容

  • 没有找到相关文章

最新更新