Python定时任务与周期任务(任务调度)




1、定时任务初体验


Python标准库中的threading模块提供了Timer类可用于一个定时任务

"""
Timer(interval, func, args)
- interval: 延迟多长时间执行任务(单位:s)
- function: 要执行任务的函数对象
- args/kwargs: 函数的参数(tuple)
"""

以下是一个示例:

from datetime import datetime
from threading import Timer

# 等待3秒打印当前时间
def task():
    Timer(3, run, ()).start()

def run():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

task()

2、Sched库


Sched是Python的标准库之一,Sched是事件调度器,它通过Scheduler类来调度事件,可用于定时任务或周期任务

使用步骤如下:

1)创建任务调度器

'''
sched.scheduler(timefunc, delayfunc)
 - timefunc:代表当前时间
 - delayfunc:用于暂停运行的时间单元
一般使用默认参数:time.time和time.sleep
'''

2)添加调度任务

Scheduler提供了两个添加调度任务的函数:

'''
①、enter(delay, priority, action, argument=(), kwargs={}):延迟一定时间执行任务
 - delay:延迟多长时间执行任务(单位:s)
 - priority:优先级,越小优先级越大
 - action:要执行任务的函数对象
 - argument、kwargs:函数的位置和关键字参数
②、enterabs(time, priority, action, argument=(), kwargs={}):指定时间执行任务
 - 任务会在time这时刻执行(time是绝对时间),其他参数与enter()相同
'''

3)开启任务

'''
scheduler.run()
'''

2.1、Sched周期任务

import sched
import time

# 1)创建定时任务
scheduler = sched.scheduler(time.time, time.sleep)
# 需要执行的任务
def task():
    print("Hello, world!")

def run_task():
    # 2)指定需要执行的任务周期执行(每隔3秒)
    scheduler.enter(3, 1, task, ())
    scheduler.enter(3, 1, run_task, ())

# 3)开启任务
run_task()
scheduler.run()

2.2、Sched定时任务

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):
    # 1)创建定时任务
    scheduler = sched.scheduler(time.time, time.sleep)
    # 2)指定需要执行的任务
    scheduler.enterabs(scheduled_time, 1, send_email, argument=(subject, message, from_addr, to_addr, smtp_server))
    # 3)开启任务
    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)

3、Schedule库


Schedule是Python中的一个轻量级定时任务调度库,可以完成每隔时间、特定日期的周期任务和定时任务

3.1、Schedule周期任务

import schedule
from datetime import datetime, timedelta

方式1:直接使用

def task():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

schedule.every(3).seconds.do(task)                # 每3秒执行一次</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值