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