網站首頁 編程語言 正文
1 取消定時任務
比如當滿足一定條件時,就取消定時任務,在這種場景下,不可能說把進程干掉,所以可以利用取消定時任務的功能
如下代碼,通過count控制當執行了5此以后,就取消定時任務
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()
執行結果如下,可以看到當執行完5此打印后,進程并沒有退出,但是定時任務不再執行了
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 定時任務只執行一次
定時任務執行一次似乎是沒啥意義的,但是在某些場景下,比如執行了一定次數后,當滿足一定條件時只需要再執行一次,這個時候就派上用場了
如下為單純的只執行一次的定時任務
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()
執行結果如下,可以發現,執行完一次就不再執行了
2022-05-25 00:14:20 in do func : 姓名:張三豐 年齡:100
執行一次的定時任務的原理其實是在任務函數結尾返回了一個取消任務的消息,這里真正的價值在于將任務是否結束的決定權交給了任務函數,即可以在任務函數中進行條件判斷,當達到一定的業務邏輯條件時,可以返回取消定時任務的消息,這樣設置定時任務就更加靈活了
如下,可以在業務中判斷是否具備停下來的條件,當條件滿足了就停下來不再執行了
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("已經執行5次了,達到預期結果了,不需要再執行了...")
return schedule.CancelJob
def main():
schedule.every(2).seconds.do(do_func,"張三豐",100)
while True:
schedule.run_pending()
if __name__=="__main__":
main()
執行結果如下:
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
已經執行5次了,達到預期結果了,不需要再執行了...
3 獲取所有的定時任務
獲取所有的定時任務作用就是可以根據一定的條件,對某些滿足條件的定時任務進行各種操作如修改等
如下代碼為對間隔3的任務從每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("原始定時任務:")
for job in all_jobs:
print(job)
for job in all_jobs:
if job.interval ==3:
job.unit="minutes"
print("修改后的定時任務:")
for job in all_jobs:
print(job)
if __name__=="__main__":
main()
執行結果如下:
原始定時任務:
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})
修改后的定時任務:
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=minutes, do=do_func, args=('張三豐', 200), kwargs={})
4 取消所有任務
如下為取消所有任務的代碼,取消之前顯示有兩個任務,取消后顯示有0個定時任務
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()
執行結果為:
2
0
5 給定時任務打標簽,同樣通過標簽獲取或取消定時任務
如下代碼演示了給任務打標簽,根據標簽挑選任務,根據標簽清除任務等操作
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).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")
# 根據demo2標簽選擇任務
demo2=schedule.get_jobs("demo2")
print("根據demo2標簽挑選出的任務")
for job in demo2:
print(job)
# 根據標簽取消定時任務
schedule.clear("demo3")
all_job=schedule.get_jobs()
print("刪除demo3標簽的任務后,剩余的任務")
for job in all_job:
print(job)
if __name__=="__main__":
main()
執行結果如下:
根據demo2標簽挑選出的任務
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})
刪除demo3標簽的任務后,剩余的任務
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
原文鏈接:http://blog.redrose2100.com/article/304
相關推薦
- 2022-02-16 Uncaught RangeError: Maximum call stack size excee
- 2022-09-22 原型鏈及原型鏈的作用/構造函數,原型對象,實例對象的三角關系
- 2022-04-28 C語言動態開辟內存詳解_C 語言
- 2022-04-29 python?tkinter實現學生信息管理系統_python
- 2022-11-17 C#實現表格數據轉實體的示例代碼_C#教程
- 2022-06-09 ASP.NET?Core中的Configuration配置一_基礎應用
- 2023-01-02 C#中static的詳細用法實例_C#教程
- 2022-09-22 描述Servlet生命周期,Servlet是線程安全的嗎? 為什么?
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支