Python啟動(dòng)定時(shí)任務(wù)

1. time模塊

time.sleep(n)
例如下面的例子

  def work(n):             - 每隔n 秒 輸出 1到10之間的一個(gè)數(shù)
    for i in range(10):
        print i
        time.sleep(n)

上面的實(shí)例是阻塞的,在sleep的時(shí)間內(nèi)程序一直堵塞
詳情請參考官方文檔-----time.sleep

2. sched 模塊

  1.導(dǎo)入sched模塊
  import sched
----------------------------------------------------------------------------------
  2.創(chuàng)建scheduler對象
  s = sched.scheduler(time.time, time.sleep)
  - time.time:返回時(shí)間戳的函數(shù)
  - time.sleep:可以在定時(shí)未到達(dá)之前阻塞
------------------------------------------------------------------------------------
  3.定義要執(zhí)行的任務(wù)
  def worker(n):
        pass
-------------------------------------------------------------------------------------
  4.將任務(wù)添加到scheduler的盒子中
  s.enter(delay,priority,action,arguments)
  - delay:int /float型的表示多少秒后執(zhí)行這個(gè)action任務(wù)
  - priority:優(yōu)先級(jí)表示當(dāng)多個(gè)任務(wù)同時(shí)在一個(gè)時(shí)刻將執(zhí)行優(yōu)先執(zhí)行那個(gè)任務(wù)
    0優(yōu)先級(jí)最高,數(shù)字越小優(yōu)先級(jí)越高
  - action: 執(zhí)行的任務(wù)在上面的例子中也就是函數(shù)名worker
  - arguments:參數(shù)列表以元組的形式如:(n,)
    如果沒有參數(shù)傳入直接傳空括號(hào)()
--------------------------------------------------------------------------------------
  5.運(yùn)行任務(wù)
  s.run()

在多線程環(huán)境中由于線程全局鎖安全,一個(gè)任務(wù)沒結(jié)束,就要等待也是阻塞的詳細(xì)請查看官方庫----sched

3.threading.Timer()

為了解決上面的阻塞問題,再多線程的環(huán)境中能夠并發(fā)執(zhí)行

  1.導(dǎo)入模塊
  from threading import Timer
----------------------------------------------------------------------------------------
  2.定義要執(zhí)行的任務(wù)
  def work(arg):
        pass
----------------------------------------------------------------------------------------
  3.啟動(dòng)執(zhí)行
  Timer(delay, work, (arg)).start()
  - 不需要區(qū)分優(yōu)先級(jí)可以同時(shí)執(zhí)行任務(wù)delay相同時(shí)就同時(shí)執(zhí)行任務(wù)
  -  delay:int /float型的表示多少秒后執(zhí)行這個(gè)work任務(wù)
  -  work: 執(zhí)行任務(wù)的方法名字
  -  arg:參數(shù)列表元祖(arg,)如果沒有就是()

詳情請參考官方文檔:threading.Timer

4.更加高級(jí)的任務(wù)調(diào)度框架 apscheduler

官方文檔 查看

  1.導(dǎo)入模塊
   from apscheduler.schedulers.blocking import BlockingScheduler

  2.初始化一個(gè)任務(wù)實(shí)例
   sched = BlockingScheduler()

  3.添加作業(yè)任務(wù)
  sched.add_job(my_job, 'interval', seconds=5)
 - my_job:作業(yè)任務(wù)
 -‘ interval ’  ‘cron ’等等

 4.啟動(dòng)任務(wù)
   sched.start()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,121評(píng)論 25 708
  • 線程狀態(tài)新建,就緒,運(yùn)行,阻塞,死亡。 線程同步多線程可以同時(shí)運(yùn)行多個(gè)任務(wù),線程需要共享數(shù)據(jù)的時(shí)候,可能出現(xiàn)數(shù)據(jù)不...
    KevinCool閱讀 880評(píng)論 0 0
  • 線程 引言&動(dòng)機(jī) 考慮一下這個(gè)場景,我們有10000條數(shù)據(jù)需要處理,處理每條數(shù)據(jù)需要花費(fèi)1秒,但讀取數(shù)據(jù)只需要0....
    不浪漫的浪漫_ea03閱讀 416評(píng)論 0 0
  • 一、異同對比選擇1、Python和ruby的相同點(diǎn): * 都強(qiáng)調(diào)語法簡單,都具有更一般的表達(dá)方式。python是縮...
    沃倫蓋茨閱讀 4,303評(píng)論 2 24
  • 老家起源渭河邊, 皇帝后裔就有咱。 得姓始祖是后禝, 同族魯迅和恩來!
    行者順達(dá)閱讀 346評(píng)論 0 1

友情鏈接更多精彩內(nèi)容