使用django实现windows任务调度管理

在 Django 中实现 Windows 任务调度管理,你可以使用几种不同的方法。最常见的方法是使用 Django 自带的 celery 或者 django-background-tasks 库,或者使用 Windows 自带的任务计划程序。下面我会分别介绍这几种方法:

方法 1:使用 Celery

Celery 是一个强大的异步任务队列/作业队列,基于分布式消息传递。它支持多种消息中间件,包括 Redis, RabbitMQ 等。

步骤:

安装 Celery

css 复制代码
pip install celery

配置 Celery

在 Django 项目中创建一个 celery.py 文件,例如在 your_project 目录下:

css 复制代码
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
 
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

配置 init.py

在 your_app 目录下添加 init.py 文件,以便 Django 自动发现任务:

css 复制代码
from __future__ import absolute_import, unicode_literals
 
from .celery import app as celery_app
 
__all__ = ('celery_app',)

定义任务

在 your_app 的 tasks.py 文件中定义任务:

css 复制代码
from celery import shared_task
 
@shared_task
def my_scheduled_task():
    # 你的任务代码
    print("执行定时任务")

配置 Celery 定时任务

settings.py 中配置 Celery Beat:

css 复制代码
CELERY_BEAT_SCHEDULE = {
    'my-scheduled-task': {
        'task': 'your_app.tasks.my_scheduled_task',
        'schedule': 30.0,  # 每30秒执行一次
    },
}

运行 Celery Worker 和 Beat

css 复制代码
celery -A your_project worker --loglevel=info
celery -A your_project beat --loglevel=info

方法 2:使用 django-background-tasks

django-background-tasks 是一个简单的后台任务框架,不需要额外的消息代理。

步骤:

安装 django-background-tasks

css 复制代码
pip install django-background-tasks

配置

settings.py 中添加 'background_task' 到 INSTALLED_APPS。

css 复制代码
INSTALLED_APPS = [
    ...
    'background_task',
    ...
]

定义任务

在 your_app 的 tasks.py 中定义任务:

css 复制代码
from background_task import background
 
@background(schedule=30)  # 每30秒执行一次
def my_scheduled_task():
    # 你的任务代码
    print("执行定时任务")

运行后台任务守护进程

css 复制代码
python manage.py run_background_tasks --settings=your_project.settings --loglevel=info --traceback --stdout --pidfile= --rm-pidfile --logfile= --rm-logfile --daemonize --max-workers=1 --max-tasks-per-child=1000 --timeout=300 --cleanup-expired=True --cleanup-frequency=600 --cleanup-grace=300 --cleanup-limit=10000 --cleanup-keep=10000 --cleanup-expire=1800 --cleanup-expire-grace=3600 --cleanup-expire-keep=1800 --cleanup-expire-limit=18000 --cleanup-expire-grace-keep=36000 --cleanup-expire-grace-limit=36000 --cleanup-expire-grace-keep=36000 --cleanup-expire-grace-limit=36000 --cleanup-expire-grace-keep=360
相关推荐
小糖学代码6 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
Data_agent7 小时前
1688获得1688店铺详情API,python请求示例
开发语言·爬虫·python
周杰伦fans8 小时前
pycharm之gitignore设置
开发语言·python·pycharm
weixin_462446238 小时前
【原创实践】python 获取节假日列表 并保存为excel
数据库·python·excel
计算机毕设匠心工作室8 小时前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
别叫我->学废了->lol在线等8 小时前
演示 hasattr 和 ** 解包操作符
开发语言·前端·python
free-elcmacom9 小时前
机器学习入门<6>BP神经网络揭秘:从自行车摔跤到吃一堑长一智的AI智慧
人工智能·python·深度学习·神经网络·机器学习
Hi202402179 小时前
如何录制浏览器播放的音频?虚拟音频线与Python采集步骤
python·音视频
programer_339 小时前
本地手动创建一个MCP(windows环境)
windows·python·ai·mcp·cherry studio
电饭叔11 小时前
不含Luhn算法《python语言程序设计》2018版--第8章14题利用字符串输入作为一个信用卡号之二(识别卡号有效)
java·python·算法