刚学完怎么用Python实现定时任务,转头就跑去撩妹!

一、发送消息

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("因为痛苦太有价值,因为回忆太珍贵,所以我们更要继续往前走")

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

二、定时发送消息

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

四、总结

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、总结思路

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

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

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

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

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)

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

到此这篇关于刚学完怎么用Python实现定时任务,转头就跑去撩妹!的文章就介绍到这了,更多相关Python实现定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 基于Apscheduler实现定时任务

    导语 在工作场景遇到了这么一个场景,就是需要定期去执行一个缓存接口,用于同步设备配置.首先想到的就是Linux上的crontab,可以定期,或者间隔一段时间去执行任务.但是如果你想要把这个定时任务作为一个模块集成到Python项目中,或者想持久化任务,显然crontab不太适用.Python的APScheduler模块能够很好的解决此类问题,所以专门写这篇文章,从简单入门开始记录关于APScheduler最基础的使用场景,以及解决持久化任务的问题,最后结合其他框架深层次定制定时任务模块这几个点入

  • Python定时任务框架APScheduler原理及常用代码

    APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站的程序等等,都涉及到了关于定时任务的问题,第一时间想到的是利用time模块的time.sleep()方法使程序休眠来达到定时任务的目的,虽然这样也可以,但是总觉得不是那么的专业,^_^所以就找到了python的定时任务模块APScheduler: APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功

  • Python while true实现爬虫定时任务

    记得以前的windows 任务定时是可以的正常使用的,今天试了下,发现不能正常使用了,任务计划总是挂起. 接下来记录下python 爬虫定时任务的几种解决方法. 今天是第一篇,后面会陆续更新. 首先最容易的是while true死循环挂起,上代码 import osimport timeimport sysfrom datetime import datetime, timedelta def One_Plan(): # 设置启动周期 Second_update_time = 24 * 60 *

  • python 实现定时任务的四种方式

    用Python实现定时任务 有些时候我们需要每隔一段时间就要执行一段程序,或者是往复循环执行某一个任务.比如博主在上篇文章讲的爬虫一样,在实现对某个目标进行在线爬取的话,也需要用到实时任务. 用Python实现定时任务的四种方法 while True: + sleep() threading.Timer定时器 调度模块schedule 任务框架APScheduler 定时要完成的Task(简单定义下) import datetime def Task(): now = datetime.date

  • python异步实现定时任务和周期任务的方法

    一. 如何调用 def f1(arg1, arg2): print('f1', arg1, arg2) def f2(arg1): print('f2', arg1) def f3(): print('f3') def f4(): print('周期任务', int(time.time())) timer = TaskTimer() # 把任务加入任务队列 timer.join_task(f1, [1, 2], timing=15.5) # 每天15:30执行 timer.join_task(f

  • Python定时任务APScheduler安装及使用解析

    1.简介 APScheduler是一个 Python 定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及 crontab 类型的任务,并且可以持久化任务.并以 daemon 方式运行应用. 2.APScheduler四个组件 APScheduler 四个组件分别为:触发器(trigger),作业存储(job store),执行器(executor),调度器(scheduler). 触发器(trigger) 包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行.除

  • Python定时任务随机时间执行的实现方法

    背景: 有一个爬虫服务,需要定时从公开网站上拉取一些数据,为了避免被识别为爬虫(防爬虫的识别需要根据很多特征,时间仅仅是其中一个维度),需要在指定的时间内,随机生成一个时间爬取 脚本是python写的,直接上代码... import logging import traceback from datetime import datetime from apscheduler.schedulers.background import BackgroundScheduler scheduler =

  • 刚学完怎么用Python实现定时任务,转头就跑去撩妹!

    一.发送消息 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' # 授权码(这个要填自己获取到的)

  • 使用python tkinter实现各种个样的撩妹鼠标拖尾效果

    目录 一.系统拖尾 二.文艺型拖尾 三.实用型拖尾 四.爱心拖尾 五.奔跑的火柴人型拖尾 六.胡桃摇钱拖尾 七.女朋友或者老婆拖尾 python-tkinter 实现各种个样的撩妹鼠标拖尾,效果图展示: 系统的拖尾已经无法满足我们了,女朋友叫你把鼠标拖尾换成她的照片,让你时时刻刻都可以看见她,这个要求你答不答应. 当然,这个要求还是可以满足一下的,我们来具体看一看吧. 要制作拖尾,首先,我们需要知道鼠标的位置,那有没有获取鼠标位置的方法呢?答案当然是有的.因此,我们引用到pyautogui模块

  • python Celery定时任务的示例

    本文介绍了python Celery定时任务的示例,分享给大家,具体如下: 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE . Celery的定时任务都由celery beat来进行调度.celery beat默认按照settings.py之中的时区时间来调度定时任务. 创建定时任务 一种创建定时任务的方式是配置CELERYBEAT_SCHEDULE: #每30秒调用task.add from datetime import timedelta CELERYBEA

  • Python实现定时任务的八种方案详解

    目录 利用whileTrue:+sleep()实现定时任务 使用Timeloop库运行定时任务 利用threading.Timer实现定时任务 利用内置模块sched实现定时任务 利用调度模块schedule实现定时任务 利用任务框架APScheduler实现定时任务 APScheduler中的重要概念 Job作业 Trigger触发器 Executor执行器 Jobstore作业存储 Event事件 调度器 Scheduler的工作流程 使用分布式消息系统Celery实现定时任务 使用数据流工

  • Linux下刚安装完mysql修改密码的简单方法

    在Centos中安装MySQL后默认的是没有root密码的,默认的是回车, 那么为了方便需要修改密码. 没有密码为MYSQL加密码: mysql -uroot -p 回车 提示输入密码,为空回车 update mysql.user set password=PASSWORD('12345678') where user='root'; 刷新权限表,输入如下命令 flush privileges; 退出 quit 以上所述是小编给大家介绍的Linux下刚安装完mysql修改密码的简单方法,希望对大

  • 解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程. from threading import Timer def scheduletaskwrap(): pritn "in task" Timer(10, scheduletaskwrap).start() Timer(10, scheduletaskwrap).start() 象

  • 使用Python做定时任务及时了解互联网动态

    前言 本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新. 故会有这么一个需求, 想记录自己想看的漫画或动画并在其更新的时候第一时间知道, 当然, 你可以拓展到任何你想关注的, 都可以通过邮件及时推送. 思路 目录 运行环境 Python3.6 第三方库 fake-useragent==0.1.11 pyquery==1.4.0 requests==2.21.0 pip3 install -r requiremen

  • python BlockingScheduler定时任务及其他方式的实现

    本文介绍了python BlockingScheduler定时任务及其他方式的实现,具体如下: #BlockingScheduler定时任务 from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime 首先看看周一到周五定时执行任务 # 输出时间 def job(): print(datetime.now().strtime("%Y-%m-%d %H:%M:%S"

  • jenkins配置python脚本定时任务过程图解

    这篇文章主要介绍了jekins配置python脚本定时任务过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.首先安装jekins环境,访问网页https://jenkins.io/zh/download/,下载长期稳定版如下: 2.下载安装包后直接运行,进行选择安装路径,傻瓜式安装.安装完成后,点Finished,弹出jekins输入密匙网页,根据网页提示路径,找到 对应的jekins密匙输入后,选择推荐插件安装即可.(也可以不安装插

随机推荐