在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python定時任務實踐

冬至子 ? 來源:ICTworker ? 作者:ICTworker ? 2023-05-20 17:53 ? 次閱讀

背影

由于程序需求,監測配置變化需要設置定時任務,每分鐘執行一次,對任務持久化要求不高,不需要時可以關閉定時任務

定時任務庫對比

根據上面需求,我找到幾個庫來實現

schedule:Python job scheduling for humans. 輕量級,無需配置的作業調度庫

Apscheduler:一個高級的 Python 任務調度庫

Celery:是一個簡單,靈活,可靠的分布式系統,用于處理大量消息,同時為操作提供維護此類系統所需的工具, 也可用于任務調度

基于我們的需求,我們只需要輕量級的庫就可以,我們選用schedule庫

直接使用 pip install schedule進行安裝使用

import schedule
import time


# 定義你要周期運行的函數
def job():
    print("I'm working...")


schedule.every(10).minutes.do(job)               # 每隔 10 分鐘運行一次 job 函數
schedule.every().hour.do(job)                    # 每隔 1 小時運行一次 job 函數
schedule.every().day.at("10:30").do(job)         # 每天在 10:30 時間點運行 job 函數
schedule.every().monday.do(job)                  # 每周一 運行一次 job 函數
schedule.every().wednesday.at("13:15").do(job)   # 每周三 1315 時間點運行 job 函數
schedule.every().minute.at(":17").do(job)        # 每分鐘的 17 秒時間點運行 job 函數


while True:
    schedule.run_pending()   # 運行所有可以運行的任務
    time.sleep(1)

上述是簡單的使用示例,我們需求定時分鐘級就用schedule.every(1).minutes.do(job) 就可以,但是定時任務執行后會占用線程,那么運行后我們的程序會卡,schedule 是阻塞式的,默認情況下, schedule 按順序執行所有的作業,不能達到并行執行任務,我們使用多線程來解決。

圖片

可看到有三個類CancelJob、Scheduler、Job

CancelJob

class CancelJob(object):
    pass

可以看到這是一個空類,這個類的作用是當job執行函數返回一個CancelJob類型的對象時,執行完之后就會被Schedule移除,簡單說就是只會執行一次。

其它源碼可以自行查看學習。

items =schedule.get_jobs() #調用這個可以顯示所有定時任務,括號內可以加特定的tag,只顯示特定的任務
print(items)
for item in items: 
    item=str(item)
    self.tree1.insert('',0,values=[item])

我們使用這個來作為任務管理界面顯示所有定時任務。

圖片

那么定時任務怎么取消呢?

# 通過 tag 函數給它們添加唯一標識符進行分組,取消時通過標識符進行取消相應組的任務
def greet(name):
    print('Hello {}'.format(name))


schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend')
schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend')
schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')
schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest')


schedule.clear('daily-tasks')

schedule取消定時任務,通過tag來進行標識,這樣就能實現簡單的定時任務管理與刪除。

其實我們也可以使用循環來實現重復執行函數加上time.sleep()來實現定時執行,循環里加個條件,滿足條件就break跳出,這樣也能實現定時暫停。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 定時器
    +關注

    關注

    23

    文章

    3256

    瀏覽量

    115442
  • python
    +關注

    關注

    56

    文章

    4809

    瀏覽量

    85071
收藏 人收藏

    評論

    相關推薦

    關于stm32系統定時任務的問題

    在用stm32做一個飛控程序時。需要用到上面這種系統循環定時任務,有一個問題:在System_Task_Loop函數里面,有1ms 、2ms、5ms的循環任務,但是他的這些定時是怎么得到的?是隨便
    發表于 10-10 23:43

    Linux系統定時任務Crond

    會定期(默認每分鐘檢查一次)檢查系統中是否有要執行的任務工作,如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作,這個crond定時任務服務就相當于我們平時早起使用的鬧鐘一
    發表于 07-05 06:22

    linux的循環定時任務

    linux循環定時任務
    發表于 05-20 14:59

    ucos iii定時任務有什么用?

    ucos iii 的定時任務有什么用,通過定時任務定時與普通的調用系統定時函數定時有什么區別?
    發表于 10-07 06:16

    定時任務的發展史是怎么樣的

    定時任務是互聯網行業里最常用的服務之一,本文給大家介紹定時任務在我司的發展歷程。 linux系統中一般使用crontab命令來實現,在Java世界里,使用最廣泛的就是quartz了。我司
    發表于 07-18 17:38 ?0次下載
    <b class='flag-5'>定時任務</b>的發展史是怎么樣的

    SpringBoot如何實現動態增刪啟停定時任務

    在spring boot項目中,可以通過 @EnableScheduling 注解和@Scheduled注解實現定時任務,也可以通過SchedulingConfigurer接口來實現定時任務。但是
    的頭像 發表于 09-24 09:49 ?3007次閱讀
    SpringBoot如何實現動態增刪啟停<b class='flag-5'>定時任務</b>

    Python定時任務的實現方式

    在日常工作中,我們常常會用到需要周期性執行的任務,一種方式是采用 Linux 系統自帶的 crond 結合命令行實現。另外一種方式是直接使用Python。接下來整理的是常見的Python定時任
    的頭像 發表于 10-08 15:20 ?6557次閱讀

    解析Golang定時任務庫gron設計和原理

    正巧,最近看到了 gron 這個開源項目,它是用 Golang 實現一個并發安全的定時任務庫。實現非常簡單精巧,代碼量也不多。今天我們就來一起結合源碼看一下,怎樣基于 Golang 的能力做出來一個【定時任務庫】。
    的頭像 發表于 12-15 13:57 ?1400次閱讀

    求一種SpringBoot定時任務動態管理通用解決方案

    SpringBoot的定時任務的加強工具,實現對SpringBoot原生的定時任務進行動態管理,完全兼容原生@Scheduled注解,無需對原本的定時任務進行修改
    的頭像 發表于 02-03 09:49 ?835次閱讀

    Spring Boot中整合兩種定時任務的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務實現策略,當然也支持 Quartz,本文我們就來看下 Spring Boot 中兩種定時任務的實現方式。
    的頭像 發表于 04-07 14:55 ?1613次閱讀
    Spring Boot中整合兩種<b class='flag-5'>定時任務</b>的方法

    在Spring Boot中如何使用定時任務

    本文介紹在 Spring Boot 中如何使用定時任務,使用非常簡單,就不做過多說明了。
    的頭像 發表于 04-12 10:56 ?1021次閱讀

    如何動態添加修改刪除定時任務

    如何動態添加修改刪除定時任務?那么我們一起看看具體怎么實現,先看下本節大綱: (1)思路說明; (2)代碼解析; (3)修改定時任務執行周期特別說明;
    的頭像 發表于 04-12 11:06 ?1138次閱讀

    Linux如何使用cron進行定時任務的操作

    按計劃執行命令對于計算機來說非常重要,因為假如我親自去執行一些任務的話,可能會因為多方面因素不能按時執行,所以定時任務就顯得非常重要了! cron就是一個能夠執行定時任務的命令,其實該命令本身不難,下面小編帶您詳細了解!
    的頭像 發表于 05-12 16:27 ?2105次閱讀

    定時器如何實現定時任務

    1.1、單次定時任務實現 boost 的asio庫里有幾個定時器,老的有 deadline_timer , 還有三個可配合 C++11 的 chrono
    的頭像 發表于 11-09 17:20 ?1076次閱讀

    linux定時任務的用法總結

    習慣了使用 windows 的計劃任務,使用 linux 中的 crontab 管理定時任務時很不適應。
    的頭像 發表于 08-14 18:16 ?911次閱讀
    linux<b class='flag-5'>定時任務</b>的用法總結
    主站蜘蛛池模板: 婷婷激情五月 | 欧美最猛性xxxx免费 | 天天艹天天射 | 久久狠狠色噜噜狠狠狠狠97 | xx视频在线观看 | 天堂资源网 | 国产美女精品久久久久久久免费 | 特黄特级毛片免费视 | www色多多| 亚洲一级毛片免费看 | 国产亚洲精品久久久久久牛牛 | 亚洲香蕉毛片久久网站老妇人 | 日本视频一区在线观看免费 | 人人爱天天操 | 成人欧美一区二区三区小说 | 亚洲影视一区二区 | 亚洲美女啪啪 | japanesexxx日本69 japan日韩xxxx69hd | 在线观看日本亚洲一区 | 欧美午夜性 | 人人干天天干 | 国产午夜精品理论片久久影视 | 欧美视频在线观在线看 | 日本三级全黄三级a | 九色窝 | se01亚洲 | 国产精品japanese人妖 | 成熟妇女毛耸耸性视频 | 国模私拍一区二区三区 | 中文字幕一二三四区 | 5g影院午夜伴侣 | 国模精品视频一区二区三区 | 精品国产1000部91麻豆 | 天天干天天澡 | 1515hh四虎免费观com | 天天弄天天干 | 日本亚洲天堂网 | 欧美老汉色| 亚洲三级在线视频 | videossexotv极度另类高清 | 婷婷五月色综合香五月 |