剛學(xué)完怎么用Python實(shí)現(xiàn)定時(shí)任務(wù),轉(zhuǎn)頭就跑去撩妹!
一、發(fā)送消息
import smtplib from email.mime.text import MIMEText from email.header import Header def send_massage(text): from_addr = '2469784691@qq.com' # 郵件發(fā)送人賬號(hào) to_addrs = '2469784691@qq.com' # 接收人郵件賬號(hào),可以寫自己的 qqCode = 'ohkp123fmsldiji' # 授權(quán)碼(這個(gè)要填自己獲取到的) stmp = smtplib.SMTP_SSL('smtp.qq.com', 465)# 配置服務(wù)器 stmp.login(from_addr, qqCode)#發(fā)送人登陸 message = MIMEText(text, 'plain', 'utf-8') # 發(fā)送的內(nèi)容 message['From'] = Header("你的愛人", 'utf-8') # 發(fā)件人 message['To'] = Header("老婆", 'utf-8') # 收件人 subject = '每天都給你發(fā)消息'#主題 message['Subject'] = Header(subject, 'utf-8') # 郵件標(biāo)題 try: stmp.sendmail(from_addr, to_addrs, message.as_string())# 發(fā)送 except Exception as e: print('郵件發(fā)送失敗--' + str(e)) send_massage("因?yàn)橥纯嗵袃r(jià)值,因?yàn)榛貞浱滟F,所以我們更要繼續(xù)往前走")
如圖,這下,發(fā)送消息的函數(shù)已經(jīng)有了,然后我們繼續(xù)來(lái)看。
二、定時(shí)發(fā)送消息
女朋友說(shuō):我要你每天早上8點(diǎn),給我發(fā)送一條消息。
A方案(無(wú)裝飾器,傳參)
a、不傳參
模塊只需要導(dǎo)入import schedule
schedule.every().day.at("8:00").do(send_massage)#不傳參數(shù)while True:#循環(huán)控制 schedule.run_pending()#run_pending:運(yùn)行所有可以運(yùn)行的任務(wù) time.sleep(1)#防止運(yùn)算速度過(guò)快,添加等待。如果不添加可能會(huì)導(dǎo)致計(jì)算機(jī)卡頓。Cpu直線飆升
就這么搞定了,然后女朋友又說(shuō)了,你怎么沒(méi)有給我發(fā)送內(nèi)容。
好嘛,參數(shù)沒(méi)傳。
b、傳參
schedule.every().day.at("8:00").do(send_massage,text="內(nèi)容")#傳參數(shù),多個(gè)就傳多個(gè)
B方案(有裝飾器,傳參)
a、不傳參
from schedule import * @repeat(every().day.at("8:00"))#在所需函數(shù)前添加 def send_massage(text):… while True:#循環(huán)控制 run_pending()#run_pending:運(yùn)行所有可以運(yùn)行的任務(wù) time.sleep(1)#防止運(yùn)算速度過(guò)快,添加等待。如果不添加可能會(huì)導(dǎo)致計(jì)算機(jī)卡頓。Cpu直線飆升
b、傳參
from schedule import * @repeat(every().day.at("8:00"),text="內(nèi)容")#在所需函數(shù)前添加,參數(shù)多個(gè)就傳多個(gè) def send_massage(text):… while True:#循環(huán)控制 run_pending()#run_pending:運(yùn)行所有可以運(yùn)行的任務(wù) time.sleep(1)#防止運(yùn)算速度過(guò)快,添加等待。如果不添加可能會(huì)導(dǎo)致計(jì)算機(jī)卡頓。Cpu直線飆升
三、多線程發(fā)送消息
好了,現(xiàn)在女朋友的需求又變了,她說(shuō):我要你每天早上8:00給我發(fā)早安,晚上八點(diǎn)給我發(fā)晚安。中午你也還要發(fā)消息給我。
A方案(無(wú)裝飾器,傳參)
a、不傳參
因?yàn)樾枰褂枚嗑€程,那肯定要使用模塊threading
import threading import schedule 需要添加一個(gè)多線程的函數(shù), def run_threaded(func): job_thread = threading.Thread(target=func) job_thread.start() schedule.every().day.at("8:00").do(run_threaded,send_message)#線程1 schedule.every().day.at("20:00").do(run_threaded,send_message)#線程2, while True: schedule.run_pending() time.sleep()
b、傳遞參數(shù)
需要給線程傳遞參數(shù),再通過(guò)線程把參數(shù)傳給函數(shù):
def run_threaded(func,text): job_thread = threading.Thread(target=func,args=(text,)) job_thread.start() schedule.every().day.at("8:00").do(run_threaded,send_message,text="內(nèi)容")#線程1 schedule.every().day.at("20:00").do(run_threaded,send_message,text="內(nèi)容")#線程2 while True: schedule.run_pending() time.sleep(1)
B方案(有裝飾器,傳參)
a、不傳參
裝飾器不再使用對(duì)應(yīng)函數(shù)上方,而使用在啟動(dòng)多線程函數(shù)的上方,添加一個(gè)裝飾器表示一個(gè)任務(wù),多添加幾個(gè)就是多個(gè)了,是不是很神奇
@repeat(every().day.at("8:00"),func=send_massage) @repeat(every().day.at("20:00"),func=send_massage) def run_threaded(func): job_thread = threading.Thread(target=func) job_thread.start() while True: run_pending() time.sleep(1)
b、傳參
傳參的方式也大同小異,裝飾器不再使用對(duì)應(yīng)函數(shù)上方,而使用在啟動(dòng)多線程函數(shù)的上方,如下:
@repeat(every().day.at("8:00"),func=send_massage,text="2354") @repeat(every().day.at("20:00"),func=send_massage,text="235412341234") def run_threaded(func,text): job_thread = threading.Thread(target=func,args=(text,)) job_thread.start() while True: run_pending() time.sleep(1)
四、總結(jié)
1、常用方法名:
""" second,秒;seconds minute,分鐘;minutes hour,時(shí);hours day,天;days monday,周一 tuesday,周二 wednesday,周三 thursday,周四 friday,周五 saturday,周六 sunday,周日 主要方法: at 在……時(shí)候 to …到… until 直到……時(shí)候 """
2、常用函數(shù)方法:
a、無(wú)裝飾器
schedule.every(10).seconds.do(job)#每10秒運(yùn)行一次 schedule.every(10).minutes.do(job)#每隔十分鐘執(zhí)行一次任務(wù) schedule.every().hour.do(job)#每小時(shí)運(yùn)行一次 schedule.every().day.at("10:30").do(job)##每天的10:30執(zhí)行一次任務(wù) schedule.every(5).to(10).minutes.do(job)#每隔5到10分鐘執(zhí)行一次任務(wù) schedule.every(5).to(10).days.do(job)#每隔5到10天執(zhí)行一次任務(wù) schedule.every().monday.do(job)#每周一的這個(gè)時(shí)候執(zhí)行一次任務(wù) schedule.every().wednesday.at("13:15").do(job)#每周三13:15執(zhí)行一次任務(wù) schedule.every().minute.at(":17").do(job)#每分鐘在第17秒的時(shí)候執(zhí)行任務(wù) schedule.every().hour.at(":17").do(job)#每小時(shí)在第17分鐘的時(shí)候執(zhí)行任務(wù) schedule.every().hours.until("18:30").do(job)# 每個(gè)小時(shí)運(yùn)行作業(yè),18:30結(jié)束 schedule.every().hours.until("2030-01-01 18:33").do(job)# 每個(gè)小時(shí)運(yùn)行作業(yè),2030-01-01 18:33后停止 schedule.every().hours.until(timedelta(hours=8)).do(job)# 每個(gè)小時(shí)運(yùn)行作業(yè),8個(gè)小時(shí)后停止
b、有裝飾器
@repeat(every(10).seconds)#每10秒運(yùn)行一次 @repeat(every(10).minutes)#每隔十分鐘執(zhí)行一次任務(wù) @repeat(every().hour)#每小時(shí)運(yùn)行一次 @repeat(every().day.at("10:30"))##每天的10:30執(zhí)行一次任務(wù) @repeat(every(5).to(10).minutes)#每隔5到10分鐘執(zhí)行一次任務(wù) @repeat(every(5).to(10).days)#每隔5到10天執(zhí)行一次任務(wù) @repeat(every().monday)#每周一的這個(gè)時(shí)候執(zhí)行一次任務(wù) @repeat(every().wednesday.at("13:15"))#每周三13:15執(zhí)行一次任務(wù) @repeat(every().minute.at(":17"))#每分鐘在第17秒的時(shí)候執(zhí)行任務(wù) @repeat(every().hour.at(":17"))#每小時(shí)在第17分鐘的時(shí)候執(zhí)行任務(wù)@repeat(every().hours.until("18:30"))# 每個(gè)小時(shí)運(yùn)行作業(yè),18:30結(jié)束@repeat(every().hours.until("2030-01-01 18:33"))# 每個(gè)小時(shí)運(yùn)行作業(yè),2030-01-01 18:33后停止 @repeat(every().hours.until(timedelta(hours=8)))# 每個(gè)小時(shí)運(yùn)行作業(yè),8個(gè)小時(shí)后停止
3、總結(jié)思路
其實(shí)單線程和多線程是相通的,重要的是融匯貫通。先掌握單線程,多線程也就迎刃而解了。
多線程唯一不同的不再是使用已確定的函數(shù),而是轉(zhuǎn)變?yōu)樾麻_啟一個(gè)線程去執(zhí)行我們需要的函數(shù)。思路如圖:
五、定時(shí)給女朋友發(fā)送消息,完整代碼
定時(shí)每天早上,晚上發(fā)送消息完整代碼
import smtplib from email.mime.text import MIMEText from email.header import Header import threading from schedule import * def send_massage(text): from_addr = '2469784691@qq.com' # 郵件發(fā)送人賬號(hào) to_addrs = '2469784691@qq.com' # 接收人郵件賬號(hào),可以寫自己的 qqCode = 'ohkpw123fmsldiji' # 授權(quán)碼(這個(gè)要填自己獲取到的) stmp = smtplib.SMTP_SSL('smtp.qq.com', 465)# 配置服務(wù)器 stmp.login(from_addr, qqCode)#發(fā)送人登陸 message = MIMEText(text, 'plain', 'utf-8') # 發(fā)送的內(nèi)容 message['From'] = Header("你的愛人", 'utf-8') # 發(fā)件人 message['To'] = Header("老婆", 'utf-8') # 收件人 subject = '每天都給你發(fā)消息'#主題 message['Subject'] = Header(subject, 'utf-8') # 郵件標(biāo)題 try: stmp.sendmail(from_addr, to_addrs, message.as_string())# 發(fā)送 except Exception as e: print('郵件發(fā)送失敗--' + str(e))@repeat(every().day.at("10:00"),func=send_massage,text="早上好")#at之后時(shí)間不能小于當(dāng)前時(shí)間。 @repeat(every().day.at("20:00"),func=send_massage,text="晚上好") def run_thread(func,text):#多線程 thread = threading.Thread(target=func,args=(text,)) thread.start() if __name__ == '__main__': while True: run_pending() time.sleep(1)
當(dāng)看見他把代碼部署到服務(wù)器,并每天給女朋友發(fā)送消息時(shí),心里莫名的難受,買個(gè)服務(wù)器你用來(lái)掛機(jī)掙游戲掙金幣不香嗎?
到此這篇關(guān)于剛學(xué)完怎么用Python實(shí)現(xiàn)定時(shí)任務(wù),轉(zhuǎn)頭就跑去撩妹!的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 實(shí)現(xiàn)Windows下設(shè)置定時(shí)任務(wù)來(lái)運(yùn)行python腳本
- 如何給windows設(shè)置定時(shí)任務(wù)并運(yùn)行python腳本
- python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式
- 5分鐘快速掌握Python定時(shí)任務(wù)框架的實(shí)現(xiàn)
- python 基于Apscheduler實(shí)現(xiàn)定時(shí)任務(wù)
- Python定時(shí)任務(wù)框架APScheduler原理及常用代碼
- Python定時(shí)任務(wù)APScheduler安裝及使用解析
- Python定時(shí)任務(wù)實(shí)現(xiàn)方案
相關(guān)文章
Python使用keys() 獲取 Redis 數(shù)據(jù)庫(kù)中的所有鍵
哈希、列表、集合、排序集合、字符串、JSON 和流是 Redis 支持的眾多數(shù)據(jù)結(jié)構(gòu)之一,本文將討論獲取 Redis 數(shù)據(jù)庫(kù)中的所有鍵,感興趣的朋友跟隨小編一起看看吧2023-08-08Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)教程
原本感覺(jué)在Django1.7+python 2.78+pycharm環(huán)境下配置mysql數(shù)據(jù)庫(kù)是件很容易的事情,結(jié)果具體操作的時(shí)候才發(fā)現(xiàn),問(wèn)題還是挺多的,這里記錄一下最終的配置結(jié)果,給需要的小伙伴參考下吧2014-11-11Python實(shí)現(xiàn)暴力匹配算法(字符串匹配)
本文主要介紹了Python實(shí)現(xiàn)暴力匹配算法,其主要思想是逐個(gè)字符地比較文本串和模式串,從文本串的每個(gè)可能的起始位置開始,依次檢查是否有匹配的子串,下面就來(lái)介紹 一下如何實(shí)現(xiàn)2023-09-09python區(qū)塊鏈簡(jiǎn)易版交易完善挖礦獎(jiǎng)勵(lì)示例
這篇文章主要介紹了python區(qū)塊鏈簡(jiǎn)易版交易完善挖礦獎(jiǎng)勵(lì)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05