衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python定時(shí)任務(wù)實(shí)踐

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

背影

由于程序需求,監(jiān)測(cè)配置變化需要設(shè)置定時(shí)任務(wù),每分鐘執(zhí)行一次,對(duì)任務(wù)持久化要求不高,不需要時(shí)可以關(guān)閉定時(shí)任務(wù)

定時(shí)任務(wù)庫(kù)對(duì)比

根據(jù)上面需求,我找到幾個(gè)庫(kù)來實(shí)現(xiàn)

schedule:Python job scheduling for humans. 輕量級(jí),無需配置的作業(yè)調(diào)度庫(kù)

Apscheduler:一個(gè)高級(jí)的 Python 任務(wù)調(diào)度庫(kù)

Celery:是一個(gè)簡(jiǎn)單,靈活,可靠的分布式系統(tǒng),用于處理大量消息,同時(shí)為操作提供維護(hù)此類系統(tǒng)所需的工具, 也可用于任務(wù)調(diào)度

基于我們的需求,我們只需要輕量級(jí)的庫(kù)就可以,我們選用schedule庫(kù)

直接使用 pip install schedule進(jìn)行安裝使用

import schedule
import time


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


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


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

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

圖片

可看到有三個(gè)類CancelJob、Scheduler、Job

CancelJob

class CancelJob(object):
    pass

可以看到這是一個(gè)空類,這個(gè)類的作用是當(dāng)job執(zhí)行函數(shù)返回一個(gè)CancelJob類型的對(duì)象時(shí),執(zhí)行完之后就會(huì)被Schedule移除,簡(jiǎn)單說就是只會(huì)執(zhí)行一次。

其它源碼可以自行查看學(xué)習(xí)。

items =schedule.get_jobs() #調(diào)用這個(gè)可以顯示所有定時(shí)任務(wù),括號(hào)內(nèi)可以加特定的tag,只顯示特定的任務(wù)
print(items)
for item in items: 
    item=str(item)
    self.tree1.insert('',0,values=[item])

我們使用這個(gè)來作為任務(wù)管理界面顯示所有定時(shí)任務(wù)。

圖片

那么定時(shí)任務(wù)怎么取消呢?

# 通過 tag 函數(shù)給它們添加唯一標(biāo)識(shí)符進(jìn)行分組,取消時(shí)通過標(biāo)識(shí)符進(jìn)行取消相應(yīng)組的任務(wù)
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取消定時(shí)任務(wù),通過tag來進(jìn)行標(biāo)識(shí),這樣就能實(shí)現(xiàn)簡(jiǎn)單的定時(shí)任務(wù)管理與刪除。

其實(shí)我們也可以使用循環(huán)來實(shí)現(xiàn)重復(fù)執(zhí)行函數(shù)加上time.sleep()來實(shí)現(xiàn)定時(shí)執(zhí)行,循環(huán)里加個(gè)條件,滿足條件就break跳出,這樣也能實(shí)現(xiàn)定時(shí)暫停。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115387
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于stm32系統(tǒng)定時(shí)任務(wù)的問題

    在用stm32做一個(gè)飛控程序時(shí)。需要用到上面這種系統(tǒng)循環(huán)定時(shí)任務(wù),有一個(gè)問題:在System_Task_Loop函數(shù)里面,有1ms 、2ms、5ms的循環(huán)任務(wù),但是他的這些定時(shí)是怎么得到的?是隨便
    發(fā)表于 10-10 23:43

    Linux系統(tǒng)定時(shí)任務(wù)Crond

    會(huì)定期(默認(rèn)每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務(wù)工作,如果有,便會(huì)根據(jù)其預(yù)先設(shè)定的定時(shí)任務(wù)規(guī)則自動(dòng)執(zhí)行該定時(shí)任務(wù)工作,這個(gè)crond定時(shí)任務(wù)服務(wù)就相當(dāng)于我們平時(shí)早起使用的鬧鐘一
    發(fā)表于 07-05 06:22

    linux的循環(huán)定時(shí)任務(wù)

    linux循環(huán)定時(shí)任務(wù)
    發(fā)表于 05-20 14:59

    ucos iii定時(shí)任務(wù)有什么用?

    ucos iii 的定時(shí)任務(wù)有什么用,通過定時(shí)任務(wù)定時(shí)與普通的調(diào)用系統(tǒng)定時(shí)函數(shù)定時(shí)有什么區(qū)別?
    發(fā)表于 10-07 06:16

    定時(shí)任務(wù)的發(fā)展史是怎么樣的

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

    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

    在spring boot項(xiàng)目中,可以通過 @EnableScheduling 注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過SchedulingConfigurer接口來實(shí)現(xiàn)定時(shí)任務(wù)。但是
    的頭像 發(fā)表于 09-24 09:49 ?3002次閱讀
    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停<b class='flag-5'>定時(shí)任務(wù)</b>

    Python定時(shí)任務(wù)的實(shí)現(xiàn)方式

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實(shí)現(xiàn)。另外一種方式是直接使用Python。接下來整理的是常見的Python定時(shí)任
    的頭像 發(fā)表于 10-08 15:20 ?6365次閱讀

    解析Golang定時(shí)任務(wù)庫(kù)gron設(shè)計(jì)和原理

    正巧,最近看到了 gron 這個(gè)開源項(xiàng)目,它是用 Golang 實(shí)現(xiàn)一個(gè)并發(fā)安全的定時(shí)任務(wù)庫(kù)。實(shí)現(xiàn)非常簡(jiǎn)單精巧,代碼量也不多。今天我們就來一起結(jié)合源碼看一下,怎樣基于 Golang 的能力做出來一個(gè)【定時(shí)任務(wù)庫(kù)】。
    的頭像 發(fā)表于 12-15 13:57 ?1384次閱讀

    求一種SpringBoot定時(shí)任務(wù)動(dòng)態(tài)管理通用解決方案

    SpringBoot的定時(shí)任務(wù)的加強(qiáng)工具,實(shí)現(xiàn)對(duì)SpringBoot原生的定時(shí)任務(wù)進(jìn)行動(dòng)態(tài)管理,完全兼容原生@Scheduled注解,無需對(duì)原本的定時(shí)任務(wù)進(jìn)行修改
    的頭像 發(fā)表于 02-03 09:49 ?825次閱讀

    Spring Boot中整合兩種定時(shí)任務(wù)的方法

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

    在Spring Boot中如何使用定時(shí)任務(wù)

    本文介紹在 Spring Boot 中如何使用定時(shí)任務(wù),使用非常簡(jiǎn)單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?1014次閱讀

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?那么我們一起看看具體怎么實(shí)現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時(shí)任務(wù)執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1126次閱讀

    Linux如何使用cron進(jìn)行定時(shí)任務(wù)的操作

    按計(jì)劃執(zhí)行命令對(duì)于計(jì)算機(jī)來說非常重要,因?yàn)榧偃缥矣H自去執(zhí)行一些任務(wù)的話,可能會(huì)因?yàn)槎喾矫嬉蛩夭荒馨磿r(shí)執(zhí)行,所以定時(shí)任務(wù)就顯得非常重要了! cron就是一個(gè)能夠執(zhí)行定時(shí)任務(wù)的命令,其實(shí)該命令本身不難,下面小編帶您詳細(xì)了解!
    的頭像 發(fā)表于 05-12 16:27 ?2099次閱讀

    定時(shí)器如何實(shí)現(xiàn)定時(shí)任務(wù)

    1.1、單次定時(shí)任務(wù)實(shí)現(xiàn) boost 的asio庫(kù)里有幾個(gè)定時(shí)器,老的有 deadline_timer , 還有三個(gè)可配合 C++11 的 chrono
    的頭像 發(fā)表于 11-09 17:20 ?1067次閱讀

    linux定時(shí)任務(wù)的用法總結(jié)

    習(xí)慣了使用 windows 的計(jì)劃任務(wù),使用 linux 中的 crontab 管理定時(shí)任務(wù)時(shí)很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?904次閱讀
    linux<b class='flag-5'>定時(shí)任務(wù)</b>的用法總結(jié)
    百人百家乐官网软件供应| 大赢家足球比分| 百家乐官网怎么赢对子| 百家乐科学| 蓝盾百家乐官网代理| 百家乐赌场| 嘉禾百家乐的玩法技巧和规则| 吉林省| 百家乐园qq群| 利都百家乐官网国际娱乐平台| 大发888棋牌下载| 土豪百家乐官网的玩法技巧和规则 | 奇博国际娱乐网| 无锡百家乐的玩法技巧和规则| 江都市| 老虎机技巧| 如何玩百家乐游戏| 百家乐官网切入法| 太阳城百家乐官网投注| 妈祖棋牌迷| 广州百家乐娱乐场开户注册| 做生意的怎样招财| 百家乐官网庄闲对冲| 网上现金棋牌| 大发888注册优惠代码| 澳门百家乐官网赢钱秘| 利博国际| 大发888娱乐城健账号| 至尊百家乐贺一航| 百家乐官网b28博你| 大城县| 全讯网新2网站112| 金百家乐官网的玩法技巧和规则| 能赚钱的棋牌游戏| 百家乐鸿泰棋牌| 新锦江百家乐官网娱乐| 百家乐官网的技术与心态| 百家乐官网筹码套装包邮| 皇冠现金投注网| 太阳城线上娱乐城| 百家乐塑料扑克牌盒|