zoukankan      html  css  js  c++  java
  • python:定时器、定时任务、调度器

    python实现定时任务的方法有

    1、死循环+sleep。(不推荐,Linux中会被未知原因杀死,可能是sleep抛出异常了)
    2、threading的Timer
    3、使用sched模块
    4、使用定时框架APScheduler(强烈推荐,需要pip安装,参考:https://www.cnblogs.com/yueerwanwan0204/p/5480870.html概念说明
    5、使用Linux的定时任务(Crontab)

    cron语法:https://www.cnblogs.com/wangyuyu/p/4230742.html

    参考:

    https://www.jb51.net/article/170393.htm

    我测试过的一个python代码例子:

    # coding:utf-8
    from apscheduler.schedulers.blocking import BlockingScheduler
    import datetime
    
    
    def aps_test(x):
        print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), x
    
    
    if __name__ == '__main__':
        # 创建如下类型的调度器。仅可用在当前你的进程之内,与当前的进行共享计算资源
        scheduler = BlockingScheduler()
    
        # (一)时刻单点执行
        # 定义未来的一个时刻字串
        time_str1 = datetime.datetime.now() + datetime.timedelta(seconds=12)
        print(u"12秒后的时间字串")
        print(time_str1)
        # 一次任务,形式一
        # scheduler.add_job(func=aps_test, args=('一次性任务1',), next_run_time=time_str1)
        # 一次任务,形式二
        # scheduler.add_job(func=aps_test, args=('一次性任务2',), run_date='2020-07-02 17:05:30')
        # scheduler.add_job(func=aps_test, args=('一次性任务2',), run_date=time_str1)
    
        # (二)时刻周期永久执行
        # interval格式定义周期(循环任务从运行开始计算时间间隔,不故意等整数时刻)
        # scheduler.add_job(func=aps_test, args=('循环任务-每3秒',), trigger='interval', seconds=3)  # 每3秒
        # scheduler.add_job(func=aps_test, args=('循环任务-每1分钟',), trigger='interval', minutes=1)  # 每1分钟
        # scheduler.add_job(func=aps_test, args=('循环任务-每1小时',), trigger='interval', hours=1)  # 每1小时
    
        # cron格式定义周期(定时任务会取整数时刻运行)
        # scheduler.add_job(func=aps_test, args=('定时任务-每5秒',), trigger='cron', second='*/5')  # 每5秒
        # 每分钟 处理。如:17:56:01
        # scheduler.add_job(func=aps_test, args=('定时任务-每分钟',), trigger='cron', minute='*', second='1')
        # #每个小时 处理。如:18:01:01
        # scheduler.add_job(func=aps_test, args=('定时任务-每小时',), trigger='cron', hour='*', minute='1', second='1')
        # #每天某个时刻点 归档日志。如:18:06:06
        # scheduler.add_job(func=aps_test, args=('定时任务-每天18:06:06点钟',), trigger='cron', hour='18', minute='6', second='6')
        # #每天19点 归档日志。如:19:00:00
        # scheduler.add_job(func=aps_test, args=('定时任务-每天19点钟',), trigger='cron', hour='19')
        # scheduler.add_job(func=aps_test, args=('定时任务-每天19点钟',), trigger='cron', hour='19', minute='0', second='0')
    
        # (三)时刻周期有限执行
        # interval格式定义周期,start_date和end_date指定有限时间区间
        scheduler.add_job(func=aps_test, args=('循环任务-特点时间段,每3秒运行一次',), trigger='interval', seconds=3,
                          start_date='2020-07-01 09:30:00', end_date='2025-07-02 19:40:30')
    
        # 开启调度器
        scheduler.start()
    

      

  • 相关阅读:
    Linux命令-chmod、chown和chgrp
    UUID是如何保证全局唯一的
    Java实现HTML转换为PDF的常见方法
    Java内存溢出详解
    Java 版本6下载大全
    spring 标签
    java 静态成员访问
    Java开发之@PostConstruct执行顺序
    Java集合和数组的区别
    集合转数组的toArray()和toArray(T[] a)方法
  • 原文地址:https://www.cnblogs.com/andy9468/p/13225454.html
Copyright © 2011-2022 走看看