1爸黄、while循環(huán)中使用sleep
缺點(diǎn):不容易控制赢织,而且是個阻塞函數(shù)
2、schedule模塊
優(yōu)點(diǎn):可以管理和調(diào)度多個任務(wù),可以進(jìn)行控制
缺點(diǎn):阻塞式函數(shù)
3虑瀑、Threading模塊中的Timer
優(yōu)點(diǎn):非阻塞
缺點(diǎn):不易管理多個任務(wù)
4湿滓、sched模塊
sched模塊實(shí)現(xiàn)了一個時(shí)間調(diào)度程序,該程序可以通過單線程執(zhí)行來處理按照時(shí)間尺度進(jìn)行調(diào)度的時(shí)間舌狗。
通過調(diào)用scheduler.enter(delay,priority,func,args)函數(shù)叽奥,可以將一個任務(wù)添加到任務(wù)隊(duì)列里面,當(dāng)指定的時(shí)間到了痛侍,就會執(zhí)行任務(wù)(func函數(shù))朝氓。
?delay:任務(wù)的間隔時(shí)間。
?priority:如果幾個任務(wù)被調(diào)度到相同的時(shí)間執(zhí)行主届,將按照priority的增序執(zhí)行這幾個任務(wù)赵哲。
?func:要執(zhí)行的任務(wù)函數(shù)
?args:func的參數(shù)
執(zhí)行結(jié)果為:
按順序執(zhí)行任務(wù):
執(zhí)行結(jié)果為:
s.run()會阻塞當(dāng)前線程的執(zhí)行
可以用
也可以用s.cancal(action)來取消sched中的某個action
5、定時(shí)框架APScheduler
APScheduler是python的一個定時(shí)任務(wù)框架君丁,它提供了基于日期date枫夺、固定時(shí)間間隔interval、以及l(fā)inux上的crontab類型的定時(shí)任務(wù)绘闷。該礦機(jī)不僅可以添加橡庞、刪除定時(shí)任務(wù)较坛,還可以將任務(wù)存儲到數(shù)據(jù)庫中、實(shí)現(xiàn)任務(wù)的持久化扒最。
APScheduler有四種組件:
?triggers(觸發(fā)器):觸發(fā)器包含調(diào)度邏輯丑勤,每一個作業(yè)有它自己的觸發(fā)器,用于決定接下來哪一個作業(yè)會運(yùn)行吧趣,除了他們自己初始化配置外法竞,觸發(fā)器完全是無狀態(tài)的。
?job stores(作業(yè)存儲):用來存儲被調(diào)度的作業(yè)强挫,默認(rèn)的作業(yè)存儲器是簡單地把作業(yè)任務(wù)保存在內(nèi)存中岔霸,其它作業(yè)存儲器可以將任務(wù)作業(yè)保存到各種數(shù)據(jù)庫中,支持MongoDB俯渤、Redis秉剑、SQLAlchemy存儲方式。當(dāng)對作業(yè)任務(wù)進(jìn)行持久化存儲的時(shí)候稠诲,作業(yè)的數(shù)據(jù)將被序列化,重新讀取作業(yè)時(shí)在反序列化诡曙。
?executors(執(zhí)行器):執(zhí)行器用來執(zhí)行定時(shí)任務(wù)臀叙,只是將需要執(zhí)行的任務(wù)放在新的線程或者線程池中運(yùn)行。當(dāng)作業(yè)任務(wù)完成時(shí)价卤,執(zhí)行器將會通知調(diào)度器劝萤。對于執(zhí)行器,默認(rèn)情況下選擇ThreadPoolExecutor就可以了慎璧,但是如果涉及到一下特殊任務(wù)如比較消耗CPU的任務(wù)則可以選擇ProcessPoolExecutor床嫌,當(dāng)然根據(jù)根據(jù)實(shí)際需求可以同時(shí)使用兩種執(zhí)行器。
?schedulers(調(diào)度器):調(diào)度器是將其它部分聯(lián)系在一起胸私,一般在應(yīng)用程序中只有一個調(diào)度器厌处,應(yīng)用開發(fā)者不會直接操作觸發(fā)器、任務(wù)存儲以及執(zhí)行器岁疼,相反調(diào)度器提供了處理的接口阔涉。通過調(diào)度器完成任務(wù)的存儲以及執(zhí)行器的配置操作,如可以添加捷绒。修改瑰排、移除任務(wù)作業(yè)。
APScheduler提供了七種調(diào)度器:
?BlockingScheduler:適合于只在進(jìn)程中運(yùn)行單個任務(wù)的情況暖侨,通常在調(diào)度器是你唯一要運(yùn)行的東西時(shí)使用椭住。
?BackgroundScheduler: 適合于要求任何在程序后臺運(yùn)行的情況,當(dāng)希望調(diào)度器在應(yīng)用后臺執(zhí)行時(shí)使用字逗。
?AsyncIOScheduler:適合于使用asyncio異步框架的情況
?GeventScheduler: 適合于使用gevent框架的情況
?TornadoScheduler: 適合于使用Tornado框架的應(yīng)用
?TwistedScheduler: 適合使用Twisted框架的應(yīng)用
?QtScheduler: 適合使用QT的情況
APScheduler提供了四種存儲方式:
?MemoryJobStore
?sqlalchemy
?mongodb
?redis
APScheduler提供了三種任務(wù)觸發(fā)器:
?data:固定日期觸發(fā)器:任務(wù)只運(yùn)行一次京郑,運(yùn)行完畢自動清除宅广;若錯過指定運(yùn)行時(shí)間,任務(wù)不會被創(chuàng)建
?interval:時(shí)間間隔觸發(fā)器
?cron:cron風(fēng)格的任務(wù)觸發(fā)
示例1傻挂、# 該示例代碼生成了一個BlockingScheduler調(diào)度器乘碑,使用了默認(rèn)的任務(wù)存儲MemoryJobStore,以及默認(rèn)的執(zhí)行器ThreadPoolExecutor金拒,并且最大線程數(shù)為10兽肤。
示例2、
示例3绪抛、
運(yùn)行結(jié)果為:
示例4资铡、
運(yùn)行結(jié)果為: