python schedule库

文章目录

schedule

  • 安装:

    pip install schedule

按时间间隔执行定时任务

  • 主要注意例如day,days这种单复数的区别

    且schedule方法是串行的,也就是说,如果各个任务之间时间不冲突,那是没问题的;如果时间有冲突的话,会串行的执行命令。

    python 复制代码
    import schedule
    from datetime import datetime
     
    def job(name):
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"Now_time:{now_time}, her name is : {name}")
     
     
    name = "张三"
    schedule.clear() # 清空任务
    # schedule.every(3).seconds.do(job, name)            # 创建一个每三秒执行一次的任务
    # schedule.every().minutes.do(job,name)              # 每隔1分钟执行一次
    # schedule.every(10).minutes.do(job,name)              # 每隔10分钟执行一次
    # schedule.every().hour.do(job, name)                  # 每隔一小时执行一次
    # schedule.every().day.do(job,name)                    # 每隔一天执行一次
    # schedule.every(3).days.do(job,name)                  # 每隔三天执行一次
    # schedule.every().day.at("10:30").do(job, name)       # 每天上午10:30
    schedule.every().day.at('17:12').do(job, name)       # 每天下午17:12
    # schedule.every(5).to(10).days.do(job, name)          # 每隔5到10天执行一次
    # schedule.every().monday.do(job, name)                # 每周一的这个时候执行一次任务
    # schedule.every().wednesday.at("13:15").do(job, name) #每周三13:15执行一次任务
    
     
    while True:
        schedule.run_pending() # 运行所有可以运行的任务
        time.sleep(1)
    
    """输出"""
    Now_time:2023-07-10 17:12:00, her name is : 张三
    Now_time:2023-07-11 17:12:00, her name is : 张三
    
          

装饰器:通过 @repeat() 装饰静态方法

  • 示例代码

    python 复制代码
    from datetime import datetime
    import schedule
    from schedule import every, repeat, run_pending
    
    schedule.clear()
    
    @repeat(every(3).seconds)
    def task1():
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time}, 任务1,每3秒执行一次")
    
    @repeat(every(10).seconds)
    def task2():
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time}, 任务2,每10秒执行一次")
     
     
    while True:
        run_pending()
    
        
    """输出"""
    NowTime : 2023-07-10 17:18:41, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:44, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:47, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:48, 任务2,每10秒执行一次     1
    NowTime : 2023-07-10 17:18:50, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:53, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:56, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:18:58, 任务2,每10秒执行一次      1
    NowTime : 2023-07-10 17:18:59, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:19:02, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:19:05, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:19:08, 任务2,每10秒执行一次       1

传递参数

  • 不使用装饰器传参

    python 复制代码
    from datetime import datetime
    import schedule
    
    schedule.clear()
    
    def task1(string):
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time}, {string}")
    
    def task2(string):
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time}, 任务2,每10秒执行一次")
    
    schedule.every(3).seconds.do(task1,string='任务1,每3秒执行一次')
    schedule.every(10).seconds.do(task1,string='任务2,每10秒执行一次')
    
    while True:
        run_pending()
        
        
    """输出"""
    NowTime : 2023-07-10 17:24:25, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:28, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:31, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:32, 任务2,每10秒执行一次
    NowTime : 2023-07-10 17:24:34, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:37, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:40, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:42, 任务2,每10秒执行一次
    NowTime : 2023-07-10 17:24:43, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:46, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:49, 任务1,每3秒执行一次
    NowTime : 2023-07-10 17:24:52, 任务2,每10秒执行一次
  • 使用装饰器传参

    python 复制代码
    from datetime import datetime
    import schedule
    from schedule import every, repeat, run_pending
    
    schedule.clear()
    
    @repeat(every(3).seconds,'任务1,每3秒执行一次')
    def task(string):
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time},{string} ")
    
    @repeat(every(10).seconds,'任务2,每10秒执行一次')
    def task2(string):
        now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"NowTime : {now_time}, {string}")
    
    while True:
        run_pending()
        
        
    """输出"""
    NowTime : 2023-07-10 17:27:53,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:27:56,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:27:59,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:00, 任务2,每10秒执行一次
    NowTime : 2023-07-10 17:28:02,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:05,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:08,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:10, 任务2,每10秒执行一次
    NowTime : 2023-07-10 17:28:11,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:14,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:17,任务1,每3秒执行一次 
    NowTime : 2023-07-10 17:28:20, 任务2,每10秒执行一次

取消定时任务

  • schedule.cancel_job(jobname)

    python 复制代码
    import schedule
    import sys
    
    
    i = 0
    def some_task():
        global i
        i += 1
        print(i)
        if i == 5:
            schedule.cancel_job(job)
            print('cancel job')
            sys.exit(0)
     
     
    job = schedule.every().second.do(some_task)
    while True:
        schedule.run_pending()
    
        
    """输出"""
    1
    2
    3
    4
    5
    cancel job
    An exception has occurred, use %tb to see the full traceback.

在指定时间执行一次任务

  • 如,在最近的一分钟里30秒的时候执行一次任务

    python 复制代码
    import time
    import schedule
    
    def task():
        print('这个任务只执行一次')
    
    
    def job_that_executes_once():
        task()
        return schedule.CancelJob
     
    schedule.every().minute.at(':30').do(job_that_executes_once)
    while True:
        schedule.run_pending()
        time.sleep(1)
        
    """输出"""
    这个任务只执行一次

根据标签检索、取消任务

  • 检索

    python 复制代码
    # 检索所有任务:schedule.get_jobs()
    import schedule
     
    def greet(name):
        print('Hello {}'.format(name))
     
     
    schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend')
    schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend')
    schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')
    schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest')
    friends = schedule.get_jobs('friend')
    print(friends)
    
    
    """输出"""
    [Every 1 day do greet('Andrea') (last run: [never], next run: 2023-07-11 17:39:47)
     Every 1 hour do greet('John') (last run: [never], next run: 2023-07-10 18:39:47)]
  • 取消

    python 复制代码
    # 取消所有任务:schedule.clear()
    import schedule
     
    def greet(name):
        print('Hello {}'.format(name))
        if name == 'Cancel':
            schedule.clear('second-tasks')
            print('cancel second-tasks')
     
     
    schedule.every().second.do(greet, 'Andrea').tag('second-tasks', 'friend')
    schedule.every().second.do(greet, 'John').tag('second-tasks', 'friend')
    schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')
    schedule.every(5).seconds.do(greet, 'Cancel').tag('daily-tasks', 'guest')
    while True:
        schedule.run_pending()
    
        
    """输出"""
    Hello Andrea
    Hello John
    Hello Andrea
    Hello John
    Hello Andrea
    Hello John
    Hello Andrea
    Hello John
    Hello Cancel
    cancel second-tasks

运行任务到某时间

  • until

    python 复制代码
    import schedule
    from datetime import datetime, timedelta, time
     
    
    def job():
        print('working...')
     
     
    schedule.every().second.until('23:59').do(job)  # 今天23:59停止
    schedule.every().second.until('2030-01-01 18:30').do(job)  # 2030-01-01 18:30停止
    schedule.every().second.until(timedelta(hours=8)).do(job)  # 8小时后停止
    schedule.every().second.until(time(23, 59, 59)).do(job)  # 今天23:59:59停止
    schedule.every().second.until(datetime(2030, 1, 1, 18, 30, 0)).do(job)  # 2030-01-01 18:30停止
    while True:
        schedule.run_pending()

相关推荐
SomeB1oody32 分钟前
【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子
开发语言·后端·rust
数据小爬虫@37 分钟前
利用Java爬虫获取店铺所有商品:技术实践与应用指南
java·开发语言·爬虫
司空良1 小时前
docker从下载到Python项目打包到容器中运行(解决下拉超时问题)
python·docker
郭wes代码1 小时前
Python安装(新手详细版)
开发语言·python
悟道茶一杯1 小时前
服务器开发 的泛型(Generics)基础知识
开发语言·后端·golang
zeijiershuai2 小时前
Java jdk8新特性:Stream 流
java·开发语言
YOULANSHENGMENG2 小时前
linux上使用cmake编译的方法
开发语言·c++
麦田里的稻草人w2 小时前
【pyqt】(二)基础框架
python·pyqt
学计算机的睿智大学生2 小时前
关于python的数据分析与应用
开发语言·python·数据分析
晚安~~2 小时前
共享充电宝系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven