<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于Fastapi實(shí)現(xiàn)定時(shí)任務(wù)

          共 1536字,需瀏覽 4分鐘

           ·

          2023-06-20 11:57

          簡(jiǎn)介

          定時(shí)任務(wù)是一個(gè)通用場(chǎng)景常見(jiàn)的功能,之前我使用django的時(shí)候,更習(xí)慣使用celery中的定時(shí)任務(wù),現(xiàn)在花時(shí)間看了看apscheduler感覺(jué)不錯(cuò),就寫(xiě)了demo,并集成到項(xiàng)目代碼中了

          任務(wù)調(diào)度主要就是以下幾個(gè)功能

          • 添加/刪除 任務(wù)調(diào)度

          • 暫停/恢復(fù) 任務(wù)調(diào)度(這條我未實(shí)現(xiàn))

          • 查看定時(shí)任務(wù)狀態(tài)

          實(shí)現(xiàn)

          添加定時(shí)任務(wù)

          其中添加定時(shí)任務(wù)方式,有以下三種方式

          • date: 固定的時(shí)間執(zhí)行一次時(shí) 用這種

          • interval: 想要在固定的間隔時(shí)間循環(huán)執(zhí)行時(shí)用這種

          • cron: 這種就是最為靈活的?crontab?表達(dá)式定時(shí)任務(wù)了


          在FastAPI異步框架中,選擇?AsyncIOScheduler調(diào)度程序

          默認(rèn)使用sqlite持久化定時(shí)任務(wù),不至于重啟就失效

          from apscheduler.schedulers.asyncio import AsyncIOSchedulerfrom apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStorefrom apscheduler.triggers.cron import CronTrigger
          Schedule = AsyncIOScheduler( jobstores={ 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite') })Schedule.start()

          不完善的地方

          • 1 由于時(shí)間倉(cāng)促,比如參數(shù)驗(yàn)證的部分,參數(shù)數(shù)據(jù)校驗(yàn),還可以繼續(xù)完善。

          • 2 添加調(diào)度任務(wù)參數(shù)封裝,我把三種添加任務(wù)的三種方式,拆成了三個(gè)函數(shù),其中很多參數(shù)沒(méi)有用到。

          • 3 其中文檔中還有說(shuō)明最大woker數(shù)量限制之類的,然后按照我使用其他定時(shí)任務(wù)的常識(shí),應(yīng)該還會(huì)函數(shù)最長(zhǎng)執(zhí)行時(shí)間限制(比如執(zhí)行的功能函數(shù)特別耗時(shí))

          • 4 ...等等


          這些就需要自己查看文檔和issues搜索了

          其他方案

          定時(shí)任務(wù)有很多種方案,比如可以使用

          • arq?https://github.com/samuelcolvin/arq?目前看來(lái) star數(shù)量不多

          • fastapi-utils?https://github.com/dmontagu/fastapi-utils

          • celery?https://github.com/celery/celery Celery就是Python中最為重量級(jí),且常見(jiàn)的任務(wù)隊(duì)列, 你也可以只用其中的定時(shí)任務(wù)功能。

          說(shuō)到arq, 想起我之前,使用過(guò)rq?并且學(xué)習(xí)的時(shí)候稍微翻譯了一下文檔 rq v1.0 https://codercharm.github.io/Python-rq-doc-cn/#/?一晃過(guò)去一年了。

          代碼地址

          • 單文件例子:?https://github.com/CoderCharm/fastapi-mysql-generator/blob/master/examples/demo_scheduler/main.py

          • 項(xiàng)目中使用:?https://github.com/CoderCharm/fastapi-mysql-generator/blob/master/{{cookiecutter.project_name}}/app/api/__init__.py#L230

          參考地址

          • apscheduler官方文檔

          • FastAPI issues

          原文來(lái)自

          https://www.cnblogs.com/CharmCode/p/14191009.html



          10T 技術(shù)資源大放送!包括但不限于:Linux、虛擬化、容器、云計(jì)算、網(wǎng)絡(luò)、Python、Go 等。在?開(kāi)源Linux?公眾號(hào)內(nèi)回復(fù)?10T,即可免費(fèi)獲??!

          Linux學(xué)習(xí)指南

          有收獲,點(diǎn)個(gè)在看?

          瀏覽 110
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人一级毛片 | 综合色秀 | 全网免费污污网站 | 最近中文字幕mv第一季歌词免费 | 免费A片视频网站 |