# 使用命令进行安装
pip install apscheduler
在 FastAPI 中使用定时任务可以通过使用 APScheduler 库来完成,APScheduler 是一个轻量级的Python定时任务框架。使用APScheduler,您可以在FastAPI中运行周期性的任务。下面是示例代码:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from fastapi import FastAPI
from datetime import datetime
app = FastAPI()
# 创建一个scheduler实例
scheduler = AsyncIOScheduler()
# 每分钟执行的定时任务
@scheduler.scheduled_job('interval', minutes=1)
async def cron_job():
# 执行任务的内容,例如打印当前时间
print(f"The current time is {datetime.now()}")
# 启动scheduler
@app.on_event("startup")
async def startup_event():
log.info("FastApi服务启动")
# 创建数据库表
await create_table()
# 启动定时任务
log.info("定时任务启动")
scheduler.start()
@app.on_event("shutdown")
async def shutdown_event():
log.info("FastApi服务关闭")
scheduler.shutdown()
log.info("定时任务关闭")
在这个示例中,我们首先导入APScheduler库和FastAPI,然后创建一个AsyncIOScheduler实例,并使用@scheduler.scheduled_job
装饰器来指定我们希望调度的任务,这里是每分钟执行一次的任务。任务函数cron_job()
中可以执行我们需要执行的操作,例如打印当前时间。
最后,我们通过调用scheduler.start()
命令启动定时任务调度程序。
需要注意的是,使用 FastAPI 中的定时任务时,需要在应用退出时停止调度器并释放资源。您可以使用以下代码在FastAPI应用程序结束时停止调度器:
@app.on_event("shutdown")
async def shutdown_event():
scheduler.shutdown()
这样,就可以在FastAPI应用程序中轻松地设置定时任务了。运行效果如下:
一个AsyncIOScheduler
实例可以同时运行多个周期性或者一次性任务,你可以通过添加多个任务来实现。下面是一个添加两个任务的示例代码:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from datetime import datetime, timedelta
scheduler = AsyncIOScheduler()
# 定义两个任务
@scheduler.scheduled_job('interval', seconds=10) # 每10秒执行一次
async def task1() -> None:
print(f'Task 1 executed at {datetime.now()}')
@scheduler.scheduled_job('interval', minutes=1) # 每分钟执行一次
async def task2() -> None:
print(f'Task 2 executed at {datetime.now()}')
在这个示例中,我们定义了两个任务:task1
每10秒执行一次,task2
每分钟执行一次。在启动调度器后,这两个任务将会同时运行。
需要注意的是,当有多个任务共享同一线程池时,它们之间的执行会相互影响。如果你希望不同的任务在彼此之间进行隔离,可以通过调用 AsyncIOScheduler
的 add_job
方法去为每个任务独立的分配线程池,例如:
scheduler.add_job(task1, 'interval', seconds=5)
scheduler.add_job(task2, 'interval', minutes=1)
这样就可以为每个任务分配自己的线程池、避免相互干扰,从而一次性运行多个任务。在支持异步任务的调度器中,可以并发执行多个任务,大大提高了任务的执行效率。
个人博客网站,灵动空间,欢迎访问