You need to enable JavaScript to run this app. Windows环境Django新手如何简单实现每小时定时执行fetchfiles管理命令
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境Django新手如何简单实现每小时定时执行fetchfiles管理命令

Windows环境下Django定时执行自定义命令的最简方案

你需要每小时执行python manage.py fetchfiles,以下两个方案都比Celery/cron配置简单,适配Windows系统:

方案1:Windows自带任务计划程序(无需额外安装依赖,优先推荐)

  • 第一步:编写批处理执行脚本
    在你的Django项目根目录新建run_fetch.bat文件,内容如下,注意替换成你自己的实际路径:
:: 切换到Django项目根目录
cd C:\path\to\your\django\project
:: 如果你用了虚拟环境,先激活虚拟环境,全局Python环境可删除这行
call C:\path\to\your\venv\Scripts\activate.bat
:: 执行Django自定义命令
python manage.py fetchfiles
:: 调试阶段可以保留下面这行看运行日志,正式使用可删除
pause

先双击运行这个bat文件,确认能正常导入数据没问题,再进行后续配置。

  • 第二步:配置Windows任务计划
  1. 按下Win+S搜索「任务计划程序」并打开
  2. 点击右侧「创建任务」,设置自定义任务名称
  3. 切换到「触发器」标签,点击「新建」,设置「每日」,重复任务间隔选「1小时」,持续时间选「24小时」,点击确定
  4. 切换到「操作」标签,点击「新建」,操作选「启动程序」,程序或脚本选择你刚才创建的run_fetch.bat,「起始于」填写你Django项目的根目录路径
  5. 切换到「设置」标签,勾选「如果任务失败,按以下频率重新启动」,设置间隔1分钟、尝试3次,也可根据需求勾选「唤醒计算机运行此任务」
  6. 点击确定保存即可,系统会每小时自动执行数据导入命令。

方案2:Python轻量定时库schedule(适合不想折腾系统配置的场景)

  • 第一步:安装依赖
pip install schedule
  • 第二步:编写定时执行脚本
    在项目根目录新建scheduler.py,内容如下,注意替换实际路径:
import schedule
import time
import subprocess
import os

# 填写你的Django项目根目录绝对路径
PROJECT_PATH = r"C:\path\to\your\django\project"
# 虚拟环境填对应python.exe路径,全局环境填全局python.exe路径
PYTHON_PATH = r"C:\path\to\your\venv\Scripts\python.exe"

def run_fetch():
    os.chdir(PROJECT_PATH)
    subprocess.run([PYTHON_PATH, "manage.py", "fetchfiles"])

# 设置每小时执行一次
schedule.every().hour.do(run_fetch)

# 启动后先执行一次测试
run_fetch()
print("定时任务已启动,每小时执行一次数据导入")
while True:
    schedule.run_pending()
    time.sleep(1)
  • 第三步:运行脚本
    直接在PyCharm终端执行python scheduler.py即可启动定时任务,如果需要开机自动后台运行,可以用NSSM工具把这个脚本注册成Windows系统服务。

额外优化建议

你提供的fetchfiles自定义命令可以做两个小调整避免后续问题:

  • 硬编码的API_KEY建议迁移到Django的settings.py中配置,调用时用from django.conf import settings读取即可
  • 批量插入数据前可以先根据time_vector、station等字段做去重判断,避免每小时导入重复数据到数据库

内容的提问来源于stack exchange,提问作者Sid33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:15:01