日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apscheduler -定时任务

發布時間:2023/12/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apscheduler -定时任务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://apscheduler.readthedocs.io/en/latest/userguide.html

簡單的使用方式為:

?

from apscheduler.schedulers.blocking import BlockingScheduler

?

sched = BlockingScheduler()

sched.add_job(ff_task,'cron',hour='0-1,8-23',minute=28)
sched.add_job(avor_task, 'cron', hour='2-7', minute='0')
sched.add_job(vor_task,'cron',hour='0-1,8-23',minute='*/3')
try:
? ? sched.start()
except (KeyboardInterrupt, SystemExit):
? ? sched.shutdown()

?

?

?

apscheduler包含四個組件 :triggers觸發器 , schedulers 調度器 ,job stores任務存儲 , executors執行器?

triggers 包含計劃的邏輯,每個任務都有自己的觸發器,來決定任務下次被觸發的時間,除了類型的初始配置,觸發器是完全無狀態的

job stores 用戶存儲被計劃的任務,默認存儲在內存中,也可存儲在各種數據庫中。當一個任務被存儲在持久化的存儲庫中時將被序列化,然后在加載到內存時被反序列化。

調度器之間不應該共用任務存儲。

executors 用于處理任務的執行。 讓預定的任務在線程或進程池中啟動,當任務結束后,執行器通知調度器什么時候進行合適的事件。

scheduler用于將所有的組建凝結起來。一個應用中通常只有一個調度器?

BlockingScheduler:用于當scheduler是進程里唯一運行的程序

BlockgroundScheduler:當你沒有使用以下任何一個調度器,并且希望scheduler在應用的后臺運行時適用

AsyncIOScheduler :當應用中使用 asyncio module(異步io模塊)時適用

GeventScheduler :當應用中使用 gevent時適用

TornadoScheduler :當構建基于Tornado的應用時適用

TwistedScheduler: 當構建基于 TwistedScheduler的應用時適用

QtScheduler: 當構建 Qt 應用時適用

?

存儲器選擇

如果每次開啟應用時都會重建任務計劃,則可以使用默認的內存存儲

如果你希望當scheduler重啟或應用宕機時,任務可以繼續的按計劃執行 ,存儲器的選擇通常取決于開發環境中使用的工具。

如果你沒什么要求則推薦使用SQLAlchemyJobStore,以PostgreSQL作為存儲后端

?

執行器

通常取決于上述組建的選擇,不過,通常默認的執行器 ThreadPoolExecutor也足夠大多數任務了。如果任務中設計了cpu密集型操作,應該考慮ProcessPoolExecutor ,來使用多核CPU。

你甚至可以同時使用這兩個執行器,將進程池執行器添加為備選執行器

?

觸發器

trigger決定任務執行時間的邏輯。ASPcheduler內置三種觸發器:

date : 一次性的固定時間點執行任務

interval: 按周期循環執行任務

cron: 語法類似linux的定時任務cron

要組合多種triggers,也可實現 ,combining triggers ,見 https://apscheduler.readthedocs.io/en/latest/modules/triggers/combining.html#module-apscheduler.triggers.combining?

?

ASPchedulre提供多種配置方式 ,可以通過一個配置的dict或者作為可選關鍵字參數傳入?;蛘咭部上葘嵗痵cheduler,添加任務,然后再配置scheduler,這種方式取得最大的靈活性。

完整的而配置說明見 https://apscheduler.readthedocs.io/en/latest/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler

?

例如,選用BackgroundScheduler ,使用默認的job store 和默認的executor:

from apscheduler.schedulers.background import BackgroundScheduler

scheduler=BackgroundScheduler()

這將會用名為”default"的MemoryJobStore ,名為“default"的ThreadPoolExecutor,默認線程池最大量為10的配置創建一個 BackgroundScheduler 。

例1

from pytz import utc?

from apscheduler.schedulers.background import BackgroundScheduler

from apscheduler.jobstores.mongodb import MongoDBJobStore

from apscheduler.executors.pool import ThreadPoolExecutor,ProcessPoolExecutor?

jobstores={

'mongo':MongoDBJobStore(),

'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')

}

executors={

'default':ThreadPoolExecutor(20),

'processpool':ProcessPoolExector(5)

}

job_defaults={

'coalesce':False,

'max_instances';3

}

scheduler=BackgroundScheduler(jonstores=jobstores,executors=executors,job_defaults,timezone=utc)

?

例2?

from apsshceduler.schedulers.background import BackgroundScheduler

scheduler=BackgroundScheduler({

'apscheduler.jonstores.mongo':{

  'type':'mongodb'

  },

'apscheduler.jobstores.default':{

  'type':'sqlalchemy',

  'url':'sqlite:///jobs.sqlite'

  },

'apscheduler.executors.default':{

  'class':'apscheduler.executors.pool:ThreadExecutor',

  'max_workers':'20'

  },

'apscheduler.executors.processpool':{

  'type':'processpool',

  'max_workers':'5'

  },

'apscheduler.job_defaults.coalesce':'false',

'apscheduler.job_defaults.max_instances':'3',

'apscheduler.timezone':'UTC',

  }

)

例3

from pytz import utc

from apscheduler.schedulers.background import BackgroundScheduler

from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore

from apscheduler.executors.pool import ProcessPoolExecutor

jobstores={

'mongo':{'type':'mongodb'},

'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')

}

executors={

'default':{'type':'threadpool','max_workers':20},

'processpool':ProcessPoolExecutor(max_workers=5)

}

job_defaults={

'coalesce':False,

'max_instances':3

}

scheduler=BackgroundScheduler()

scheduler,configure(jobstores=jobstores,executors=executors,job_defaults=job_defaults,timezone=utc)

?

轉載于:https://www.cnblogs.com/Ting-light/p/9512802.html

總結

以上是生活随笔為你收集整理的apscheduler -定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。