You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python脚本周期性执行更优方案及APScheduler调度器资料查询

解决方案与说明

一、Windows环境下更优的周期性执行方案

1. Windows任务计划程序(资源占用最优)

这是Windows原生的任务调度工具,完全无需Python进程持续运行,仅在任务触发时启动脚本执行,资源占用极低,适合周期性执行的离线任务。

配置步骤:

  • 打开「任务计划程序」→ 创建基本任务
  • 设置触发条件(如每小时执行一次)
  • 操作选择「启动程序」,程序或脚本选你的Python解释器路径(如C:\Python39\python.exe),添加参数填你的脚本绝对路径(如"C:\scripts\csv_import.py")
  • 注意配置任务的运行权限,确保能访问目标文件夹和SQL Server

脚本调整建议:

  • 路径用原始字符串避免转义:base_dir = r"C:\path"
  • 处理CSV时用with open(...)确保文件关闭,避免删除时报错
  • 导入SQL推荐用pandas.to_sql(配合fast_executemany=True)或SQL Server的BULK INSERT,比逐行插入效率高得多

2. APScheduler异步调度器(Python进程内优化)

如果需要Python进程持续运行(比如有其他关联逻辑),推荐使用AsyncIOScheduler,针对IO密集型任务(如文件读取、数据库写入)的性能更优,资源占用比BlockingScheduler更高效。

修改后的示例代码:

import os
import asyncio
import pandas as pd
from sqlalchemy import create_engine
from apscheduler.schedulers.asyncio import AsyncIOScheduler

async def import_csv_to_sql(file_path, engine):
    # 读取CSV(可结合aiofiles实现纯异步读取)
    df = pd.read_csv(file_path)
    # 批量写入SQL Server,提升写入速度
    await df.to_sql(
        name="your_target_table",
        con=engine,
        if_exists="append",
        index=False,
        method="multi",
        chunksize=1000
    )
    # 确保文件释放后删除
    os.remove(file_path)

async def s_job():
    base_dir = r"C:\path"
    # 仅筛选.csv文件
    csv_files = [f for f in os.listdir(base_dir) if f.lower().endswith(".csv")]
    # 创建SQLAlchemy数据库连接引擎
    engine = create_engine("mssql+pyodbc://username:password@server_name/db_name?driver=ODBC+Driver+17+for+SQL+Server")
    
    # 并发处理所有CSV文件
    tasks = [import_csv_to_sql(os.path.join(base_dir, f), engine) for f in csv_files]
    await asyncio.gather(*tasks)

if __name__ == "__main__":
    scheduler = AsyncIOScheduler()
    scheduler.add_job(s_job, 'interval', hours=1)
    scheduler.start()
    try:
        asyncio.get_event_loop().run_forever()
    except (KeyboardInterrupt, SystemExit):
        pass

二、APScheduler各类调度器详解

APScheduler提供多种调度器适配不同场景:

  • BlockingScheduler:你当前使用的类型,阻塞主线程,适合独立运行的定时任务脚本,逻辑简单但会持续占用一个Python进程。
  • BackgroundScheduler:在后台线程运行调度,主线程可执行其他逻辑,适合已有业务逻辑的应用(如后台服务),无需阻塞主线程。
  • AsyncIOScheduler:基于asyncio异步IO框架,适合IO密集型任务,支持异步任务调度,性能和资源利用率更优。
  • GeventScheduler:基于gevent协程库,适合使用gevent的异步场景,通过协程实现高并发。
  • TornadoScheduler:专为Tornado Web框架设计,适配Tornado的IO循环。
  • TwistedScheduler:适配Twisted异步框架,用于Twisted应用中的定时任务。
  • QtScheduler:集成Qt应用的事件循环,用于Qt GUI程序中的定时任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:56:29