在 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