Celery似乎是一个很棒的工具,但我很难理解各种Celery组件如何协同工作:
据我所知,命令行:
celery -A not-clear-what-this-option-is worker
应该运行某种芹菜"工作服务器"本身需要连接到代理服务器(我不太清楚为什么需要这么多服务器)。
然后在任何python代码中,可以通过实例化app来向工作人员发送一些任务:
app = Celery('my_module', broker='pyamqp://guest@localhost//')
然后通过以下方式使用此应用程序修饰函数:
@app.tasks
def my_func():
...
这样" my_func()"现在可以被称为" my_func.delay()"以异步的方式运行。
以下是我的问题:
如果有人对这些问题有任何了解,我将不胜感激。我打算在Django项目中使用Celery,其中对服务器的一些请求可以触发各种耗时的任务,和/或查询先前启动的任务的状态(挂起,完成,错误等等)。
答案 0 :(得分:0)
关于经纪人:
broker 的主要作用是调解客户端和 worker 之间的通信
基本上在您的工作线程运行时会生成和处理大量信息
处理这些信息是经纪人的职责
例如您可以配置 redis,以便在运行进程时服务器关闭时不会丢失任何信息
工作人员:
您可以将 worker 视为独立于您的应用程序的实例,它只会执行您委托给它的任务
关于任务的状态:
有一些方法可以通过 celery 来了解任务的状态,但我不建议根据此构建应用程序逻辑
如果你想获取一个进程的输出并将其转入另一个进程的输入,使用任务,我建议你使用队列
命令:
在终端上,您可以通过运行 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]
我希望这可以为那些来到这里的人提供一个初步的概述
答案 1 :(得分:0)
Celery 用于使函数在后台运行。想象一下,您有一个 Web API 来完成一项工作并返回一个响应。您知道,该作业会严重影响 API 的响应时间。因此,您将该特定作业转移到 Celery,您的 API 将立即响应。一些影响 API 性能的作业的示例是,
现在,让我们介绍芹菜的每个组成部分。
工人 芹菜工人执行工作(功能)。它们是异步的。因此,作为 celery 工人,您的处理器内核数量将增加一倍。您可以为 celery worker# 分配名称和任务。
应用 该应用程序是您正在处理的项目的名称。您必须在 celery 实例中指定该名称。
任务 您需要在后台执行的功能。 Celery 执行的每个任务都有一个任务 id、状态(等等)。您可以通过检查特定任务来获得该信息。
消息代理 那些将在后台执行的任务必须从你的 python 项目转移到 Celery 工人。消息代理在这里充当媒介。因此,带有参数的函数将被传输到代理,并且 Celery 将从代理中获取它们以执行。
一些代码
celery -A project_name worker_name
celery -A project_name worker_name inspect