日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Python中schedule模塊關(guān)于定時任務(wù)使用方法_python

作者:redrose2100 ? 更新時間: 2022-07-28 編程語言

1 取消定時任務(wù)

比如當滿足一定條件時,就取消定時任務(wù),在這種場景下,不可能說把進程干掉,所以可以利用取消定時任務(wù)的功能

如下代碼,通過count控制當執(zhí)行了5此以后,就取消定時任務(wù)

import schedule
import time
count=0
def do_func(name,age):
global count
count+=1
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))

def main():
job=schedule.every(2).seconds.do(do_func,"張三豐",100)
while True:
if count>=5:
schedule.cancel_job(job)
schedule.run_pending()

if __name__=="__main__":
main()

執(zhí)行結(jié)果如下,可以看到當執(zhí)行完5此打印后,進程并沒有退出,但是定時任務(wù)不再執(zhí)行了

2022-05-25 00:03:15 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:03:17 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:03:19 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:03:21 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:03:23 in do func : 姓名:張三豐 年齡:100

2 定時任務(wù)只執(zhí)行一次

定時任務(wù)執(zhí)行一次似乎是沒啥意義的,但是在某些場景下,比如執(zhí)行了一定次數(shù)后,當滿足一定條件時只需要再執(zhí)行一次,這個時候就派上用場了

如下為單純的只執(zhí)行一次的定時任務(wù)

import time
def do_func(name,age):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))
return schedule.CancelJob
def main():
schedule.every(2).seconds.do(do_func,"張三豐",100)
while True:
schedule.run_pending()

if __name__=="__main__":
main()

執(zhí)行結(jié)果如下,可以發(fā)現(xiàn),執(zhí)行完一次就不再執(zhí)行了

2022-05-25 00:14:20 in do func : 姓名:張三豐 年齡:100

執(zhí)行一次的定時任務(wù)的原理其實是在任務(wù)函數(shù)結(jié)尾返回了一個取消任務(wù)的消息,這里真正的價值在于將任務(wù)是否結(jié)束的決定權(quán)交給了任務(wù)函數(shù),即可以在任務(wù)函數(shù)中進行條件判斷,當達到一定的業(yè)務(wù)邏輯條件時,可以返回取消定時任務(wù)的消息,這樣設(shè)置定時任務(wù)就更加靈活了

如下,可以在業(yè)務(wù)中判斷是否具備停下來的條件,當條件滿足了就停下來不再執(zhí)行了

import schedule
import time
count=1
def do_func(name,age):
global count
count+=1
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))
if count >= 5:
print("已經(jīng)執(zhí)行5次了,達到預期結(jié)果了,不需要再執(zhí)行了...")
return schedule.CancelJob

def main():
schedule.every(2).seconds.do(do_func,"張三豐",100)
while True:
schedule.run_pending()

if __name__=="__main__":
main()

執(zhí)行結(jié)果如下:

2022-05-25 00:19:30 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:19:32 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:19:34 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:19:36 in do func : 姓名:張三豐 年齡:100

2022-05-25 00:19:38 in do func : 姓名:張三豐 年齡:100

已經(jīng)執(zhí)行5次了,達到預期結(jié)果了,不需要再執(zhí)行了...

3 獲取所有的定時任務(wù)

獲取所有的定時任務(wù)作用就是可以根據(jù)一定的條件,對某些滿足條件的定時任務(wù)進行各種操作如修改等

如下代碼為對間隔3的任務(wù)從每3秒修改為每3分鐘

import schedule
import time
def do_func(name,age):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))
def main():
schedule.every(2).seconds.do(do_func,"張三豐",100)
schedule.every(3).seconds.do(do_func, "張三豐", 200)
all_jobs=schedule.get_jobs()
print("原始定時任務(wù):")
for job in all_jobs:
print(job)
for job in all_jobs:
if job.interval ==3:
job.unit="minutes"
print("修改后的定時任務(wù):")
for job in all_jobs:
print(job)
if __name__=="__main__":
main()

執(zhí)行結(jié)果如下:

原始定時任務(wù):

Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})

Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})

修改后的定時任務(wù):

Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})

Job(interval=3, unit=minutes, do=do_func, args=('張三豐', 200), kwargs={})

4 取消所有任務(wù)

如下為取消所有任務(wù)的代碼,取消之前顯示有兩個任務(wù),取消后顯示有0個定時任務(wù)

import schedule
import time
def do_func(name,age):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))
def main():
schedule.every(2).seconds.do(do_func,"張三豐",100)
schedule.every(3).seconds.do(do_func, "張三豐", 200)
print(len(schedule.get_jobs()))
schedule.clear()
print(len(schedule.get_jobs()))
if __name__=="__main__":
main()

執(zhí)行結(jié)果為:

2

0

5 給定時任務(wù)打標簽,同樣通過標簽獲取或取消定時任務(wù)

如下代碼演示了給任務(wù)打標簽,根據(jù)標簽挑選任務(wù),根據(jù)標簽清除任務(wù)等操作

import schedule
import time

def do_func(name,age):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age))
def main():
# 定義定時任務(wù)時直接打標簽
schedule.every(2).seconds.do(do_func,"張三豐",100).tag("demo1","demo2")
schedule.every(3).seconds.do(do_func, "張三豐", 200).tag("demo2","demo3")
schedule.every(4).seconds.do(do_func, "張三豐", 300).tag("demo3", "demo4")
# 根據(jù)demo2標簽選擇任務(wù)
demo2=schedule.get_jobs("demo2")
print("根據(jù)demo2標簽挑選出的任務(wù)")
for job in demo2:
print(job)
# 根據(jù)標簽取消定時任務(wù)
schedule.clear("demo3")
all_job=schedule.get_jobs()
print("刪除demo3標簽的任務(wù)后,剩余的任務(wù)")
for job in all_job:
print(job)

if __name__=="__main__":
main()

執(zhí)行結(jié)果如下:

根據(jù)demo2標簽挑選出的任務(wù)

Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})

Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})

刪除demo3標簽的任務(wù)后,剩余的任務(wù)

Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})

原文鏈接:http://blog.redrose2100.com/article/304

欄目分類
最近更新