Python 官方文档:入门教程 => 点击学习
本篇文章给大家分享的是有关用python怎么实现定时任务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、发送消息import smtplibfrom em
本篇文章给大家分享的是有关用python怎么实现定时任务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerdef send_massage(text): from_addr = '2469784691@qq.com' # 邮件发送人账号 to_addrs = '2469784691@qq.com' # 接收人邮件账号,可以写自己的 qqCode = 'ohkp123fmsldiji' # 授权码(这个要填自己获取到的) stmp = smtplib.SMTP_SSL('smtp.qq.com', 465)# 配置服务器 stmp.login(from_addr, qqCode)#发送人登陆 message = MIMEText(text, 'plain', 'utf-8') # 发送的内容 message['From'] = Header("你的爱人", 'utf-8') # 发件人 message['To'] = Header("老婆", 'utf-8') # 收件人 subject = '每天都给你发消息'#主题 message['Subject'] = Header(subject, 'utf-8') # 邮件标题 try: stmp.sendmail(from_addr, to_addrs, message.as_string())# 发送 except Exception as e: print('邮件发送失败--' + str(e))send_massage("因为痛苦太有价值,因为回忆太珍贵,所以我们更要继续往前走")
如图,这下,发送消息的函数已经有了,然后我们继续来看。
女朋友说:我要你每天早上8点,给我发送一条消息。
A方案(无装饰器,传参)
a、不传参
模块只需要导入import schedule
schedule.every().day.at("8:00").do(send_massage)#不传参数while True:#循环控制 schedule.run_pending()#run_pending:运行所有可以运行的任务time.sleep(1)#防止运算速度过快,添加等待。如果不添加可能会导致计算机卡顿。Cpu直线飙升
就这么搞定了,然后女朋友又说了,你怎么没有给我发送内容。
好嘛,参数没传。
b、传参
schedule.every().day.at("8:00").do(send_massage,text="内容")#传参数,多个就传多个
B方案(有装饰器,传参)
a、不传参
from schedule import *@repeat(every().day.at("8:00"))#在所需函数前添加def send_massage(text):…while True:#循环控制 run_pending()#run_pending:运行所有可以运行的任务 time.sleep(1)#防止运算速度过快,添加等待。如果不添加可能会导致计算机卡顿。Cpu直线飙升
b、传参
from schedule import *@repeat(every().day.at("8:00"),text="内容")#在所需函数前添加,参数多个就传多个def send_massage(text):…while True:#循环控制 run_pending()#run_pending:运行所有可以运行的任务 time.sleep(1)#防止运算速度过快,添加等待。如果不添加可能会导致计算机卡顿。Cpu直线飙升
好了,现在女朋友的需求又变了,她说:我要你每天早上8:00给我发早安,晚上八点给我发晚安。中午你也还要发消息给我。
A方案(无装饰器,传参)
a、不传参
因为需要使用多线程,那肯定要使用模块threading
import threadingimport schedule需要添加一个多线程的函数,def run_threaded(func): job_thread = threading.Thread(target=func) job_thread.start()schedule.every().day.at("8:00").do(run_threaded,send_message)#线程1schedule.every().day.at("20:00").do(run_threaded,send_message)#线程2,while True: schedule.run_pending() time.sleep()
b、传递参数
需要给线程传递参数,再通过线程把参数传给函数:
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="内容")#线程1schedule.every().day.at("20:00").do(run_threaded,send_message,text="内容")#线程2while True: schedule.run_pending() time.sleep(1)
B方案(有装饰器,传参)
a、不传参
装饰器不再使用对应函数上方,而使用在启动多线程函数的上方,添加一个装饰器表示一个任务,多添加几个就是多个了,是不是很神奇
@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、传参
传参的方式也大同小异,装饰器不再使用对应函数上方,而使用在启动多线程函数的上方,如下:
@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)
1、常用方法名:
"""second,秒;secondsminute,分钟;minuteshour,时;hoursday,天;daysmonday,周一tuesday,周二wednesday,周三thursday,周四friday,周五saturday,周六sunday,周日主要方法:at 在……时候to …到…until 直到……时候"""
2、常用函数方法:
a、无装饰器
schedule.every(10).seconds.do(job)#每10秒运行一次schedule.every(10).minutes.do(job)#每隔十分钟执行一次任务schedule.every().hour.do(job)#每小时运行一次schedule.every().day.at("10:30").do(job)##每天的10:30执行一次任务schedule.every(5).to(10).minutes.do(job)#每隔5到10分钟执行一次任务schedule.every(5).to(10).days.do(job)#每隔5到10天执行一次任务schedule.every().monday.do(job)#每周一的这个时候执行一次任务schedule.every().wednesday.at("13:15").do(job)#每周三13:15执行一次任务schedule.every().minute.at(":17").do(job)#每分钟在第17秒的时候执行任务schedule.every().hour.at(":17").do(job)#每小时在第17分钟的时候执行任务schedule.every().hours.until("18:30").do(job)# 每个小时运行作业,18:30结束schedule.every().hours.until("2030-01-01 18:33").do(job)# 每个小时运行作业,2030-01-01 18:33后停止schedule.every().hours.until(timedelta(hours=8)).do(job)# 每个小时运行作业,8个小时后停止
b、有装饰器
@repeat(every(10).seconds)#每10秒运行一次@repeat(every(10).minutes)#每隔十分钟执行一次任务@repeat(every().hour)#每小时运行一次@repeat(every().day.at("10:30"))##每天的10:30执行一次任务@repeat(every(5).to(10).minutes)#每隔5到10分钟执行一次任务@repeat(every(5).to(10).days)#每隔5到10天执行一次任务@repeat(every().monday)#每周一的这个时候执行一次任务@repeat(every().wednesday.at("13:15"))#每周三13:15执行一次任务@repeat(every().minute.at(":17"))#每分钟在第17秒的时候执行任务@repeat(every().hour.at(":17"))#每小时在第17分钟的时候执行任务@repeat(every().hours.until("18:30"))# 每个小时运行作业,18:30结束@repeat(every().hours.until("2030-01-01 18:33"))# 每个小时运行作业,2030-01-01 18:33后停止@repeat(every().hours.until(timedelta(hours=8)))# 每个小时运行作业,8个小时后停止
3、总结思路
其实单线程和多线程是相通的,重要的是融汇贯通。先掌握单线程,多线程也就迎刃而解了。
多线程唯一不同的不再是使用已确定的函数,而是转变为新开启一个线程去执行我们需要的函数。思路如图:
定时每天早上,晚上发送消息完整代码
import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerimport threadingfrom schedule import *def send_massage(text): from_addr = '2469784691@qq.com' # 邮件发送人账号 to_addrs = '2469784691@qq.com' # 接收人邮件账号,可以写自己的 qqCode = 'ohkpw123fmsldiji' # 授权码(这个要填自己获取到的) stmp = smtplib.SMTP_SSL('smtp.qq.com', 465)# 配置服务器 stmp.login(from_addr, qqCode)#发送人登陆 message = MIMEText(text, 'plain', 'utf-8') # 发送的内容 message['From'] = Header("你的爱人", 'utf-8') # 发件人 message['To'] = Header("老婆", 'utf-8') # 收件人 subject = '每天都给你发消息'#主题 message['Subject'] = Header(subject, 'utf-8') # 邮件标题 try: stmp.sendmail(from_addr, to_addrs, message.as_string())# 发送 except Exception as e: print('邮件发送失败--' + str(e))@repeat(every().day.at("10:00"),func=send_massage,text="早上好")#at之后时间不能小于当前时间。@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)
以上就是用Python怎么实现定时任务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网Python频道。
--结束END--
本文标题: 用Python怎么实现定时任务
本文链接: https://lsjlt.com/news/279270.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0