<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天我們來介紹一下Python
當中的定時任務,主要用到的模組是sched
,當然除了該模組之外,還有其他的例如ApScheduler
,但是相比較與sched
模組而言,後者還需要另外通過pip
命令來下載,稍顯麻煩。那麼在這篇教學當中我們來講講sched
模組的使用教學。
我們先來看下面這個案例,程式碼如下
import sched import time def say_hello(name): print(f"Hello, world, {name}") scheduler = sched.scheduler(time.time, time.sleep) scheduler.enter(5, 1, say_hello, ("張三", )) scheduler.run()
那麼上述的程式碼中,第一步首先則是範例化一個定時器,通過如下的程式碼
import sched scheduler = sched.scheduler()
接下來我們通過enter()
方法來執行定時任務的操作,其中的引數分別是延遲的時間、任務的優先順序以及具體的執行函數和執行函數中的引數。像如上的程式碼就會在延遲5秒鐘之後執行say_hello()
函數
當然要是延遲的時間相等的時候,我們可以設定任務執行的優先順序來指定函數方法執行的順序,例如有如下的程式碼
import sched import time def say_hello(name): print(f"Hello, world, {name}") def say_hello_2(name): print(f"Hello, {name}") scheduler = sched.scheduler(time.time, time.sleep) scheduler.enter(5, 2, say_hello, ("張三", )) scheduler.enter(5, 1, say_hello_2, ("李四", )) scheduler.run()
如上述程式碼,儘管延遲的時間都是一樣的,但是say_hello()
方法的優先順序明顯要比say_hello_2()
方法要低一些,因此後者會優先執行。
除了讓函數延遲執行,我們還可以讓其重複執行,具體這樣來操作,程式碼如下
import sched import time def say_hello(): print("Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) def repeat_task(): scheduler.enter(5, 1, say_hello, ()) scheduler.enter(5, 1, repeat_task, ()) repeat_task() scheduler.run()
這裡我們新建了一個repeat_task()
自定義函數,呼叫了scheduler.enter()
方法5秒鐘執行一次之前定義的say_hello()
函數
同時我們還可以讓任務在指定的時間執行,這裡用到scheduler.entertabs()
方法,程式碼如下
import sched import time def say_hello(): print("Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 指定時間執行任務 specific_time = time.time() + 5 # 距離現在的5秒鐘之後執行 scheduler.enterabs(specific_time, 1, say_hello, ()) scheduler.run()
我們傳入其中引數使其在指定的時間,也就是距離當下的5秒鐘之後來執行任務
這裡仍然是呼叫enter()
方法來執行多個任務,程式碼如下
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 任務一在兩秒鐘只有執行 scheduler.enter(2, 1, task_one, ()) # 任務二在五秒鐘之後執行 scheduler.enter(5, 1, task_two, ()) scheduler.run()
這裡定義了兩個函數,task_one
和task_two
裡面分是同樣的執行邏輯,列印出“Hello, world!”,然後task_one()
是在兩秒鐘之後執行而task_two()
則是在5秒鐘之後執行,兩者執行的優先順序都是一樣的。
這回我們給task_one()
和task_two()
賦予不同的優先順序,看一看執行的結果如下
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 優先順序是1 scheduler.enter(2, 2, task_one, ()) # 優先順序是2 scheduler.enter(5, 1, task_two, ()) scheduler.run()
output
Task One - Hello, world!
Task Two - Hello, world!
上述的程式碼會在停頓兩秒之後執行task_one()
函數,再停頓3秒之後執行task_two()
函數
我們給定時任務新增上取消的方法,程式碼如下
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 任務一在兩秒鐘只有執行 task_one_event = scheduler.enter(2, 1, task_one, ()) # 任務二在五秒鐘之後執行 task_two_event = scheduler.enter(5, 1, task_two, ()) # 取消執行task_one scheduler.cancel(task_one_event) scheduler.run()
我們將兩秒鐘之後執行的task_one()
方法給取消掉,最後就只執行了task_two()
方法,也就列印出來“Task Two - Hello, world!”
我們來寫一個備份的指令碼,在每天固定的時間將檔案備份,程式碼如下
import sched import time import shutil def backup_files(): source = '路徑/files' destination = '路徑二' shutil.copytree(source, destination) def schedule_backup(): # 建立新的定時器 scheduler = sched.scheduler(time.time, time.sleep) # 備份程式在每天的1點來執行 backup_time = time.strptime('01:00:00', '%H:%M:%S') backup_event = scheduler.enterabs(time.mktime(backup_time), 1, backup_files, ()) # 開啟定時任務 scheduler.run() schedule_backup()
我們通過shutil
模組當中的copytree()
方法來執行拷貝檔案,然後在每天的1點準時執行
最後我們來執行定時分發郵件的程式,程式碼如下
import sched import time import smtplib from email.mime.text import MIMEText def send_email(subject, message, from_addr, to_addr, smtp_server): # 郵件的主體資訊 email = MIMEText(message) email['Subject'] = subject email['From'] = from_addr email['To'] = to_addr # 發郵件 with smtplib.SMTP(smtp_server) as server: server.send_message(email) def send_scheduled_email(subject, message, from_addr, to_addr, smtp_server, scheduled_time): # 建立定時任務的範例 scheduler = sched.scheduler(time.time, time.sleep) # 定時郵件 scheduler.enterabs(scheduled_time, 1, send_email, argument=(subject, message, from_addr, to_addr, smtp_server)) # 開啟定時器 scheduler.run() subject = 'Test Email' message = 'This is a test email' from_addr = 'test@example.com' to_addr = 'test@example.com' smtp_server = 'smtp.test.com' scheduled_time = time.time() + 60 # 一分鐘之後執行程式 send_scheduled_email(subject, message, from_addr, to_addr, smtp_server, scheduled_time)
到此這篇關於Python利用sched模組實現定時任務的文章就介紹到這了,更多相關Python sched定時任務內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45