celery应用--异步任务

配置 Celery

创建一个名为 celery.py(或任何其他名称)的文件,用于配置 Celery。在该文件中,你需要指定 Celery 使用的消息代理(例如 RabbitMQ、Redis 等)和其他配置信息。

from celery import Celery

# 创建 Celery 实例
app = Celery('your_project_name')

# 配置 Celery
app.conf.broker_url = 'your_broker_url'
app.conf.result_backend = 'your_result_backend'

# 可选:配置其他 Celery 选项

# 导入任务模块
app.autodiscover_tasks()

在上述配置中,需要替换 ‘your_project_name’、‘your_broker_url’ 和 ‘your_result_backend’ 分别为你的项目名称、消息代理的 URL 和结果后端的 URL。

创建异步任务

在你的 Django 项目中,创建一个名为 tasks.py 的文件(或任何其他名称),用于定义异步任务。在该文件中,可以定义一个或多个带有 @app.task 装饰器的函数作为你的异步任务。以下是一个示例:

from celery import shared_task

@shared_task
def process_data(data):
    # 执行异步任务的逻辑
    # ...

@shared_task
def send_email(recipient, subject, message):
    # 执行异步任务的逻辑
    # ...

在上述示例中,process_data 和 send_email 是两个异步任务的示例。你可以根据实际需求定义自己的异步任务函数。

触发异步任务

要触发异步任务,可以在你的代码中调用定义的异步任务函数。以下是一个示例:

from your_project_name.tasks import process_data

def some_function():
    # 执行一些操作
    # ...

    # 调用异步任务
    process_data.delay(data)

在上述示例中,process_data.delay(data) 将异步地调用 process_data 任务,并将 data 参数传递给任务函数。
在 Celery 中,delay() 方法和 apply_async() 方法都用于异步调用任务,但它们有一些区别。

delay() 方法:
delay()方法是Task类的实例方法,可以通过任务实例直接调用。它是一种简化的方式来调用任务,不需要显式地创建任务实例。调用delay()方法时,会立即将任务发送到 Celery 的消息队列中,然后返回一个AsyncResult` 对象,该对象可以用于获取任务的执行结果或进行其他操作。

result = debug_task.delay()

apply_async() 方法:
apply_async()方法是Task类的一个静态方法(或类方法),需要显式地创建任务实例并调用该方法。它提供了更多的灵活性,可以设置更多的参数来控制任务的调度和执行方式。通过apply_async()` 方法,你可以指定任务的执行时间、指定任务的执行队列、传递额外的参数等。

result = debug_task.apply_async()

主要区别:

delay() 方法是通过任务实例的简化方法来调用任务,不需要显式创建任务实例,适用于简单的任务调用。
apply_async() 方法是静态方法,需要显式创建任务实例,并可以设置更多的参数来控制任务调度和执行,适用于需要更高级配置的任务调用。
无论是使用 delay() 方法还是 apply_async() 方法,它们都会将任务发送到 Celery 的消息队列中进行异步执行,可以通过返回的 AsyncResult 对象来跟踪任务的执行状态和获取结果。

需要根据具体的需求选择适合的方法来调用任务。如果只需要简单地异步调用任务,可以使用 delay() 方法;如果需要更多的任务调度和执行配置选项,可以使用 apply_async() 方法。

启动 Celery Worker

最后,需要在终端中启动 Celery Worker,以便它可以处理异步任务。在项目的根目录中运行以下命令:

celery -A your_project_name worker --loglevel=info

在上述命令中,将 ‘your_project_name’ 替换为你的项目名称。

异步任务示例

Django实战:Django 3.0 + Redis 3.4 + Celery 4.4异步生成静态HTML文件
项目描述
1.1创建两个页面,一个用于创建页面,一个用于动态展示页面详情,并提供静态HMTL文件链接
2.一个页面创建完成后,使用Celery异步执行生成静态HTML文件的任务。
3.使用redis作为Celery的Broker
4.使用flower监控Celery异步任务执行情况
具体源码参考链接,实现过程
一.启动django

python manage.py runserver

访问 http://127.0.0.1:8000/:
在这里插入图片描述

二.启动celery

Celery -A myproject worker -l info -P eventlet
D:\APP_install\python\lib\site-packages\requests\__init__.py:102: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (5.1.0)/charset_normalizer (2.0.12) doesn't match a supported version!
  warnings.warn("urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported "

 -------------- celery@DESKTOP-DJPRLQD v5.2.7 (dawn-chorus)
--- ***** -----
-- ******* ---- Windows-10-10.0.19041-SP0 2024-04-17 17:31:12
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         myproject:0x2ca49b8dbe0
- ** ---------- .> transport:   redis://127.0.0.1:6379/0
- ** ---------- .> results:     redis://127.0.0.1:6379/0
- *** --- * --- .> concurrency: 12 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . myproject.celery.debug_task
  . staticpage.tasks.generate_static_page

[2024-04-17 17:31:12,089: INFO/MainProcess] Connected to redis://127.0.0.1:6379/0
[2024-04-17 17:31:12,104: INFO/MainProcess] mingle: searching for neighbors
[2024-04-17 17:31:13,135: INFO/MainProcess] mingle: all alone
[2024-04-17 17:31:13,140: INFO/MainProcess] pidbox: Connected to redis://127.0.0.1:6379/0.
[2024-04-17 17:31:13,145: WARNING/MainProcess] D:\APP_install\python\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

[2024-04-17 17:31:13,145: INFO/MainProcess] celery@DESKTOP-DJPRLQD ready.

三.启动flower

celery --broker=redis://127.0.0.1:6379/0 flower -A myproject --address=127.0.0.1 --port=5555
You have incorrectly specified the following celery arguments after flower command: ['-A']. Please specify them after celery command instead following this template: celery [celery args] flower [flower args].
[I 240417 17:30:10 command:168] Visit me at http://127.0.0.1:5555
[I 240417 17:30:10 command:176] Broker: redis://127.0.0.1:6379/0
[I 240417 17:30:10 command:177] Registered tasks:
    ['celery.accumulate',
     'celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap']
[I 240417 17:30:10 mixins:225] Connected to redis://127.0.0.1:6379/0

在这里插入图片描述
等待倒计时结束,跳转到新生成的页面:
在这里插入图片描述
flower页面如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值