apScheduler和fastapi交互

本文介绍了如何在Python中使用APScheduler库创建定时任务,并与FastAPI框架结合。内容包括APScheduler的基本概念、安装、快速入门,以及调度器、任务存储器、执行器和触发器的组件介绍。此外,还展示了如何构建、启动、添加、删除、暂停和恢复任务。最后,文章通过示例展示了APScheduler在FastAPI应用中的实际操作。
摘要由CSDN通过智能技术生成

参考文档:

基本介绍

APScheduler(Advanced Python Scheduler)是一个python的任务调度器,他可以使任务定期执行,同时我们可以动态的添加或删除任务。如果我们希望任务在下次程序启动时继续执行,那么他还支持持久化任务。除此之外,他也是跨平台的。需要注意的是,APScheduler并不是一个守护进程或单独服务,他是依托于现有服务或程序运行。

安装

pip install apscheduler

poetry add apscheduler

快速开始

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime


def job():
    print(f"{datetime.now()}执行了")


if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(func=job, trigger='interval', seconds=3)
    scheduler.start()

这个栗子做了一件事:每三秒执行一次任务。
首先,初始化调度器,这里的BlockingScheduler是阻塞性的调度器,当调用start方法时,会阻塞当前进程;然后,向调度器中添加任务,这里的任务是job方法,每执行一次任务会打印文字;这里采用的是interval(间隔执行)的方式,每三秒执行一次

组件

APScheduler具有四个基本组件:

  • triggers(触发器):包含调度逻辑。每个作业都有自己的触发器,该触发器确定下一步应在何时运行该作业。除了其初始配置外,触发器完全是无状态的。
  • job stores(任务存储器):任务存储器是可以存储任务的地方,默认情况下任务保存在内存,也可将任务保存在各种数据库中。任务存储进去后,会进行序列化,然后也可以反序列化提取出来,继续执行。
  • executors(执行器):执行器会将任务放到进程或线程中执行,任务执行完成后,执行程序会通知调度器,然后触发一些事件
  • schedulers(调度器):任务调度器是属于整个调度的总指挥官。他会合理安排作业存储器、执行器、触发器进行工作,并进行添加和删除任务等。调度器通常是只有一个的。
    在这里插入图片描述

调度器

APScheduler有很多调度器,不同的调度器适合不同的环境:

  • BlockingScheduler:适用于当前进程只有这一个调度器在工作
  • BackgroundScheduler:适用于在程序后台运行
  • AsyncIOScheduler:适用于使用了asyncio的模块
  • GeventScheduler:适用于使用了gevent的模块
  • TornadoScheduler:适用于用tornado构建的应用
  • TwistedScheduler:适用于用twisted构建的应用
  • QtScheduler:适用于构建QT应用

任务存储器

任务存储器的选择取决于是否需要任务持久化。如果每次任务启动的时候都重新创建任务,那么可以使用内存存储器(MemoryJobStore)。如果需要任务持久化,可以使用和项目匹配的数据库存储器,这样即使是程序崩溃,重启后任务依旧可以继续执行。存储器可以有以下几种:

  • MemoryJobStore:任务保存在内存中
  • SQLAlchemyJobStore:使用sqlalchemy作为存储框架,官方建议数据库使用PostgreSQL
  • MongoDBJobStore:使用 mongodb作为存储器
  • RedisJobStore:使用 redis作为存储器

执行器

执行器的选择取决于程序使用了什么框架,默认情况下使用ThreadPoolExecutor。如果任务涉及了计算密集型操作,可以考虑使用ProcessPoolExecutor。APScheduler针对不同的程序或架构,有以下几种执行器:

  • ThreadPoolExecutor:线程池执行器;
  • ProcessPoolExecutor:进程池执行器;
  • GeventExecutor: Gevent程序执行器;
  • TornadoExecutor: Tornado程序执行器;
  • TwistedExecutor: Twisted程序执行器;
  • AsyncIOExecutor: asyncio程序执行器;

触发器

APScheduler内置了三种触发器:

  • date:特定时间仅运行一次
  • interval:固定时间间隔运行
  • cron:某个时间周期运行

构建调度程序

构建调度器

假设构建一个使用默认存储器和默认执行器的阻塞调度器:

from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()

通过查看源码可以发现,默认存储器使用的是MemoryJobStore,默认执行器使用的是ThreadPoolExecutor

除了默认的配置,APScheduler也提供了许多不同的方式来配置调度器。假设现在我们希望构造一个:

FastAPI 是一种基于 Python 的现代 Web 框架,它提供了快速构建高性能 Web 应用的能力。它支持前后端的数据交互,可以使用 JSON、FormData 或其他格式来发送数据。 下面是一个简单的 FastAPI 前后端数据交互的示例: 1. 首先,需要在前端编写一个表单,并在表单中添加一个提交按钮: ```html <form id="my-form"> <input type="text" name="name"> <input type="email" name="email"> <button type="submit">提交</button> </form> ``` 2. 接下来,在 JavaScript 中编写发送数据的代码: ```javascript const form = document.querySelector('#my-form'); form.addEventListener('submit', async (e) => { e.preventDefault(); const formData = new FormData(form); const response = await fetch('/api/my-endpoint', { method: 'POST', body: formData, }); const data = await response.json(); console.log(data); }); ``` 3. 在后端,我们可以使用 FastAPI 来处理请求并返回响应: ```python from fastapi import FastAPI, Form app = FastAPI() @app.post('/api/my-endpoint') async def my_endpoint(name: str = Form(...), email: str = Form(...)): # 处理请求数据 # ... # 返回响应数据 return {'success': True} ``` 在上面的代码中,我们使用 FastAPI 的 `Form` 类型来解析表单数据,并将其作为参数传递给路由处理函数。在处理函数中,我们可以使用解析后的数据来执行相应的操作,并返回响应数据。 以上就是一个简单的 FastAPI 前后端数据交互的示例,你可以根据自己的需求进行修改和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值