喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )

大家好,又见面了,我是全栈君。

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

喝~,我笑了,组长交给他如何写定时任务,他却用来给女朋友发消息

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

 

一、前言

我裂开了,‘邻居’问我有没有定时任务的模块,并且越简单越好。于是刚好前今天就研究了一下定时任务模块,于是就告诉他使用方式,令我没有想到的是,这货他学会了之后,居然买了一个服务器给女朋友发消息,发消息,发消息……重要的事情说三遍。

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

 

二、正文

知道我们要做什么,操作起来就会轻松很多,首先我们需要假设我们有女朋友,然后就是生成一个发送消息的函数。

 

1、发送消息

import smtplib
from email.mime.text import MIMEText
from email.header import Header
def 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("因为痛苦太有价值,因为回忆太珍贵,所以我们更要继续往前走")

如图,这下,发送消息的函数已经有了,然后我们继续来看。

 

2、定时发送消息

女朋友说:我要你每天早上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直线飙升

3、多线程发送消息

好了,现在女朋友的需求又变了,她说:我要你每天早上8:00给我发早安,晚上八点给我发晚安。中午你也还要发消息给我。

A方案(无装饰器,传参)

a、不传参

因为需要使用多线程,那肯定要使用模块threading

import threading
import 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)#线程1
schedule.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="内容")#线程1
schedule.every().day.at("20:00").do(run_threaded,send_message,text="内容")#线程2
while 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)

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

三、总结

1、常用方法名:

"""
second,秒;seconds
minute,分钟;minutes
hour,时;hours
day,天;days
monday,周一
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、总结思路

其实单线程和多线程是相通的,重要的是融汇贯通。先掌握单线程,多线程也就迎刃而解了。

多线程唯一不同的不再是使用已确定的函数,而是转变为新开启一个线程去执行我们需要的函数。思路如图:

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

四、定时给女朋友发送消息,完整代码

定时每天早上,晚上发送消息完整代码

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'  # 邮件发送人账号
    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)

当看见他把代码部署到服务器,并每天给女朋友发送消息时,心里莫名的难受,买个服务器你就不能用来挂机挣游戏挣金币,他不香吗?我只能说

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

相关推荐:

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(1)–上帝给你开一个窗口(Tkinter)

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

动态数据视频(第一节)

bilibili,抖音很火的动态数据视频自动生成(第二节)

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第三节)

matplotlib给女朋友画一个爱心吧,这份满满的爱意,一定要记得收下

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111359.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQLException: #22001你知道这个错误码吗

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!文章目录java.sql.SQLException: #22001结论问题排查解决自己的一点小思考java.sql.SQLException: #22001java.sql.SQLException: #22001 at com.mysql.jdbc.SQLError.createSQLException(SQ…

    2022年2月28日
    42
  • Oracle创建表空间和创建临时表空间

    Oracle创建表空间和创建临时表空间/*第1步:创建临时表空间 */createtemporarytablespacekc_temptempfile’C:\app\Administrator\oradata\orcl\kc_temp.dbf’ size50m  autoextendon  next50mmaxsize20480m  extentmanagementlocal;   

    2022年7月27日
    1
  • mysql创建数据库的步骤_mysql创建用户并授权

    mysql创建数据库的步骤_mysql创建用户并授权创建用户:createuser‘test’@’%’identifiedby‘test’;显示ERROR1396(HY000):OperationCREATEUSERfailedfor‘test’@’%’查看是不是存在这个用户selectuserfromuser;发现没有这个用户。记得上次有删除过这个用户。可能没有刷新权限flushprivileges;之后还是不行…

    2022年8月12日
    10
  • 【Java】Red5服务器搭建(实现在线直播,流媒体视频播放)「建议收藏」

    引言流媒体文件是目前非常流行的网络媒体格式之一,这种文件允许用户一边下载一边播放,从而大大减少了用户等待播放的时间。另外通过网络播放流媒体文件时,文件本身不会在本地磁盘中存储,这样就节省了大量的磁盘空间开销。正是这些优点,使得流媒体文件被广泛应用于网络播放。流媒体服务器是通过建立发布点来发布流媒体内容和管理用户连接的。流媒体服务器能够发布从视频采集卡或摄像机等设备中传来的实况流,也可以发布事先…

    2022年4月18日
    299
  • python产生随机数的方法_产生随机数的代码

    python产生随机数的方法_产生随机数的代码Python产生随机数:一.Python自带的random库1.参生n–m范围内的一个随机数:random.randint(n,m)2.产生0到1之间的浮点数:random.random()3.产生n—m之间的浮点数:random.uniform(1.1,5.4)4.产生从n—m间隔为k的整数:random.randrange(n,m,k)5.从序列中随机选取一个元素:random.choice([1,2,3,4,5,6,7

    2025年7月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号