在 Django 中使用 Celery 调度异步多线程任务

Django
|
在 Django 中使用 Celery 调度异步多线程任务


管理 Web 应用程序中的任务可能会变得很复杂,尤其是当您需要异步执行耗时的操作时。Django 是一个流行的 Web 框架,可以使用 Celery 进行扩展,以高效处理异步任务。在这篇博文中,我们将探讨如何在 Django 应用程序中使用 Celery 设置定期任务调度。这允许您的应用程序以指定的时间间隔运行后台任务,并从主应用程序线程中卸载任务处理。

1.安装 Celery 和 Django Celery Beat

旅程从安装 Celery 和 django-celery-beat 开始。这些是 Django 中任务调度和执行的基本组件。您可以使用 pip 安装它们:

    pip install celery django-celery-beat
2.配置 Celery

安装 Celery 后,你需要配置它以与 Django 应用程序配合使用。首先创建一个名为 celery.py 在项目的主目录中。此文件将初始化 Celery 并将其链接到 Django 的设置。

    from celery import Celery
    import os

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

    app = Celery('your_project_name')

    # Using a string here means the worker will not have to serialize
    # the configuration object to child processes.
    app.config_from_object('django.conf:settings', namespace='CELERY')

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

为了确保在 Django 启动时加载此配置,请在 your_project_name/__init__.py 文件:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3.更新Django设置

接下来,通过更新将 Celery 与 Django 设置进行集成 settings.py 文件。这包括指定您的代理和结果后端,可以是 RabbitMQ 或 Redis。

    CELERY_BROKER_URL = 'redis://localhost:6379/0'  # or 'amqp://localhost//' for RabbitMQ
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_TIMEZONE = 'UTC'

    from celery.schedules import crontab

    CELERY_BEAT_SCHEDULE = {
        'task-name': {
            'task': 'myapp.tasks.task_function',
            'schedule': crontab(minute=0, hour=0),  # Executes daily at midnight
        },
    }
4.明确你的任务

现在,是时候定义你的任务了。创建一个 tasks.py 在你的 Django 应用中创建文件(例如, myapp ) 并添加您的任务功能。

    from celery import shared_task

    @shared_task
    def task_function():
        # Logic for your asynchronous, multithreaded task
        print("Task is executing")

这里, @共享任务 是 Celery 提供的装饰器,用于将该函数标记为可调用任务。

5. 运行 Celery Worker 并 Beat

最后,您需要运行 Celery worker 并节拍来开始处理任务并根据您的配置安排它们。

    # Start Celery Worker
    celery -A your_project_name worker -l info

    # Start Celery Beat
    celery -A your_project_name beat -l info

这些命令将启动工作进程来处理异步任务,并启动 beat 进程来管理周期性任务。在执行这些命令之前,请确保您的消息代理(如 Redis 或 RabbitMQ)正在运行。

通过执行这些步骤,您已使 Django 应用程序能够高效处理周期性异步任务,从而提高应用程序的性能和响应能力。 Celery 是一款功能强大的工具,通过此设置,您已准备好探索更复杂的任务处理思路。




转载免责声明: 此内容受版权保护,作者保留所有权利。欢迎转发或分享此页面,但请确保提供明确的原始来源和指向该页面的超链接。感谢您尊重我们的内容!

这篇文章有帮助吗?
196 个人中有 196 人认为这很有帮助
avatar
John Tanner
创始人

我是一名技术娴熟的软件开发人员,拥有超过20年的跨平台全栈开发经验。我专注于设计和管理大规模项目架构,并简化复杂系统。我的专业技能包括Python、Rust和Django开发。我在区块链技术、人工智能、高并发系统、应用程序和网页数据抓取、API开发、数据库优化、项目容器化以及生产环境部署方面具有深厚的造诣。

联系 John Tanner