Celery 教程:Python 开发人员必须学习的技术

在本教程中,我们将讨论最流行的、Python 开发人员必须学习的技术。Python 开发人员协会中的每个人都已经了解了 Celery,或者可能已经实现了至少一次。

在快速互联网时代,用户希望瞬间加载页面,几秒钟就能得到结果。小任务可以在一秒或几微秒内执行,但重任务可能需要几秒甚至一分钟。

那么问题来了,当我们复杂的任务还在加载的时候,我们如何提供快速的用户体验呢?

下面是异步编程的作用。Celery 用于任务的并行执行。

当中央处理器处于理想状态时,Celery 提供了在后台运行程序/作业的工具。在深入探讨这个话题之前,让我们先了解一下 Celery 的核心概念,以及我们为什么要使用它。

在本教程中,我们将讨论 Celery 的以下概念。

  • Celery 是什么?
  • 它是如何工作的?
  • 什么是任务队列?
  • 什么是消息代理?
  • 这为什么有用?
  • 它是如何工作的?
  • Celery 的特点
  • Celery 入门

Celery 是一个开源的 Python 库,用于异步运行任务。它是一个任务队列,保存任务,并以适当的方式将其分配给工人。它主要关注实时操作,但也支持调度(运行定期间隔任务)。它惊人地增强了最终用户的活动。Celery 介绍了rabbtmq**Redis 等各种消息经纪人。**

Celery 结合了各种网络框架,包括 Flask、Pylons、web2py、Tryton 和 Tornado。

假设我们需要每分钟(小时)访问一次 API,或者我们想在一天结束时发送多封电子邮件。Celery 可以很容易地安排这类周期性任务。

让我们看另一个场景:用户发送请求,页面加载时间过长。同时,Celery 通过在同一台服务器或不同的服务器上运行部分延期任务的功能来减少页面加载时间。

Celery 的工人可以通过回调更新用户界面,处理文件,发送电子邮件,修改数据库等等。

Celery 的主要优点是我们的应用可以继续响应客户端请求。因此最终用户不必不必等待。

在传统的 HTTP 请求-响应周期中,当我们通过客户端向服务器发送请求时,服务器向客户端发送响应。它适用于小任务,但当我们试图加载大任务时,它可能会变得很慢。因此,我们需要实现一个可以减少加载时间的功能。

让我们了解 Celery 的工作场景。

Celery 通过信息相互作用;通常经纪人是客户和工人之间的中间人。Celery 的内向型工作被确认为生产者和消费者模式。Celery 有三大高级元素。

生产者- 生产者是管理网络请求的【网络节点】。当应用正在处理时,任务被分配给 Celery 意味着被强制进入任务队列。

消费者- 消费者是【工人节点】监控队列头,工人承担任务并执行。工人也可以执行各种任务;因此,他们也可以扮演生产者的角色。

Queue – 它基本上是一个消息代理,充当生产者和消费者之间的桥梁。它本质上是在 web 应用和 Celery 工人之间传递消息。Celery 得到了 RabbitMQ 和 Redis 的广泛支持,也帮助了动物园管理员,亚马逊 SQS,但能力有限。

Celery 是一种方便的结构,通过延迟的任务减少生产负荷,因为它准备异步和计划的工作。以下是 Celery 的一些重要特征。

  • 开源库- Python Celery 是开源免费软件。这个特性吸引了组织或开发人员使用 Celery 来解决他们的任务,而无需支付一分钱。
  • 直接安装- 这是一个轻量级的简单库,可以轻松安装。我们可以使用“pip install-U Celery”命令从终端安装。
  • 调度- 我们可以使用日期时间模块以及Celery 节拍来指定运行任务的特定时间。Celery 拍可以定期触发任务。我们可以基于简单的时间间隔对重复事件使用周期性任务。
  • 经纪人支持- Celery 支持多个消息经纪人,通俗的说就是rabbtmq,它也支持亚马逊 SQS,但是在某些功能上有所欠缺(监控和远程控制)。
  • 与网络框架的集成- Celery 还与各种 Python 网络框架相结合,如金字塔、挂架、Django、Tornado、Trylons 和 Flask。
  • Fast – Celery 可以在一分钟内处理数百万个任务。
  • 作品流- 它可以使用一组被称为“画布”的高级原语来组合简单和复杂的作品流。

在本教程中,我们将使用 Django 实现 Celery,在这里我们将创建一个简单的任务队列。让我们从下面的步骤开始。

首先,我们将在Celery _django 文件夹中创建一个名为learn _ Celery的 Django 项目。但首先我们将创建虚拟环境。所有依赖项都将存储在虚拟环境中。

创建虚拟环境后,我们将使用以下命令激活。

使用以下命令安装 Django。

安装Django 后,创建项目。我们正在使用下面的命令创建名为学习 Celery的项目。

如果您不熟悉如何在 Django、中创建项目或应用,可以访问我们的 Django 教程。现在,我们准备在虚拟环境中安装 Celery。

我们可以使用下面的命令安装 Celery。

Celery 安装完成后,我们将在 Django 项目中配置 Celery。

打开项目的 settings.py 文件并添加以下配置。我们使用 redis 作为消息代理。

代理是使应用、系统和服务能够通信和共享信息的独立服务。让我们简化这个术语,我们通过消息队列将任务分配给工作人员。消息队列是一种先进先出的数据结构,这意味着首先存储的消息将首先被执行。所有任务将按照我们添加的顺序执行。

在本教程中,我们将使用 Redis 消息代理。

Windows 中的 Redis 安装

在 Mac/Ubuntu 中安装 Redis 非常简单,但对 Window 来说有点棘手。所以这里我们描述如何在 Windows 中安装 redis。

  • 访问 Github 链接https://github.com/tporadowski/redis/releases,点击 Redis-x64-5.0.14.msi 。它将下载。msi 文件。
  • 点击下载的设置。它会自动将 redis 安装在你的 C: drive 系统中。安装完成后,打开 redis-cli 并键入 PING。

运行 Celery 程序也需要 Redis 依赖。我们可以使用下面的命令安装 redis 依赖项。

安装完成后,使用以下命令启动服务器。

我们可以通过在终端中键入以下命令来测试 Redis 是否正常工作。

如果用 PONG 回复,工作正常。

现在打开 Django 项目中的 Celery. py 文件,并添加下面的代码。

Celery 皮


import os

from celery import Celery
from celery.schedules import crontab

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'learn_django.settings')

#pass the project name in Celery(project_name)
app = Celery('learn_django')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

#Celery Beat Settings
app.conf.beat_schedule = {
    'send-mail-every-day-at-8' :  {
        'task': 'emailExample.tasks.send_mail_func',
        'schedule': crontab(hour = 15, minute = 42),

    }

}

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

Celery 任务可以在 Django 应用/项目的 tasks.py 中创建。我们使用下面的命令在工作目录中创建一个应用。


C:\Users\User\Desktop\celery_django>python manage.py startapp celeryApp .

一旦创建了应用,创建一个任务。复制文件并创建一个任务。这些任务是用 Celery 调用的常规 Python 函数。例如,我们创建了一个函数来打印 1 到 10 的整数。


rom celery import shared_task

@shared_task(bind=True)
def test_func(self):
    for i in range(10):
        print(i)
    return "Completed"

现在在 view.py 文件中创建一个视图。

view.py


from django.http import HttpResponse
# importing task from tasks.py file
from .tasks import test_func

# Create your views here.

def test(request):
    # call the test_function using delay, calling task
    test_func.delay()
    return HttpResponse("Done")

现在我们将把这个视图映射到 urls.py 文件中的 URL。

celery app/URL . py


from django.urls import path

urlpatterns = [
    path('', test, name='test'),

pip install django-celery-result

现在,我们准备执行第一个异步任务。现在运行 python manage.py runserver ,点击本地主机链接 http://127.0.0.1:8000/。

现在打开新终端,导航到项目目录,激活虚拟环境。要启动 Celery 工人,请运行以下命令。


PS D:\celeryPython> celery -A CeleryDjango.celery worker --pool=solo -l info

正如我们所看到的,我们的 Celery 已经开始并准备执行后台工作。默认情况下,Redis 消息代理运行在 6379 端口上。


[2022-01-07 23:10:27,920: INFO/MainProcess] Connected to redis://127.0.0.1:6379//
[2022-01-07 23:10:27,936: INFO/MainProcess] mingle: searching for neighbors
[2022-01-07 23:10:29,007: INFO/MainProcess] mingle: all alone
[2022-01-07 23:10:29,029: WARNING/MainProcess] C:\Users\DEVANSH SHARMA\.virtualenvs\celeryPython-O5XHNBO2\lib\site-packages\celery\fixups\django.py:203: UserWarning: Using settings.DEBUG leads to a memory
            leak, never use this setting in production environments!
  warnings.warn('''Using settings.DEBUG leads to a memory

每次当我们访问 http://127.0.0.1:8000/向 Django 服务器发出请求时,我们应该会看到响应,Celery 会在后台异步执行我们在 task.py 文件中定义的任务。可以在 Celery 终端监控。

Celery 是一个强大的作业队列,可以在后台运行任务。它最常用于发送频繁的电子邮件。但是,它可以多种方式使用。我们可以排队;在手头长期运行的任务上使用数据块,并定义执行任务的时间。

在本教程中,我们使用 Django 以 Celery 为例。我们已经定义了 Celery 的基本概念及其工作原理。我们还指定了如何与 Django 一起实现 Celery。您可以参考本教程,并使用 Celery 来运行您的异步任务。


原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/126622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点简单一点
上一篇 2024-10-03 23:09
下一篇 2024-10-03 23:09

相关推荐

  • MQTT使用教程

    MQTT是一种轻量级的消息传输协议,适用于物联网领域中的设备与云端、设备与设备之间的数据传输。本文将介绍使用MQTT实现设备与云端数据传输的方法和注意事项。 一、准备工作 在使用M…

    编程 2025-04-29
  • Python3.6.5下载安装教程

    Python是一种面向对象、解释型计算机程序语言。它是一门动态语言,因为它不会对程序员提前声明变量类型,而是在变量第一次赋值时自动识别该变量的类型。 Python3.6.5是Pyt…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • 猿编程python免费全套教程400集

    想要学习Python编程吗?猿编程python免费全套教程400集是一个不错的选择!下面我们来详细了解一下这个教程。 一、课程内容 猿编程python免费全套教程400集包含了从P…

    编程 2025-04-29
  • Python热重载技术

    Python热重载技术是现代编程的关键功能之一。它可以帮助我们在程序运行的过程中,更新代码而无需重新启动程序。本文将会全方位地介绍Python热重载的实现方法和应用场景。 一、实现…

    编程 2025-04-29
  • Python烟花教程

    Python烟花代码在近年来越来越受到人们的欢迎,因为它可以让我们在终端里玩烟花,不仅具有视觉美感,还可以通过代码实现动画和音效。本教程将详细介绍Python烟花代码的实现原理和模…

    编程 2025-04-29
  • 使用Snare服务收集日志:完整教程

    本教程将介绍如何使用Snare服务收集Windows服务器上的日志,并将其发送到远程服务器进行集中管理。 一、安装和配置Snare 1、下载Snare安装程序并安装。 https:…

    编程 2025-04-29
  • Python包络平滑技术解析

    本文将从以下几个方面对Python包络平滑技术进行详细的阐述,包括: 什么是包络平滑技术? Python中使用包络平滑技术的方法有哪些? 包络平滑技术在具体应用中的实际效果 一、包…

    编程 2025-04-29

发表回复

登录后才能评论