首页 > 编程语言 >python apscheduler 定时任务的基本使用-4-cron触发器的使用

python apscheduler 定时任务的基本使用-4-cron触发器的使用

时间:2023-03-24 11:23:33浏览次数:54  
标签:apscheduler python datetime cron int job str date

python apscheduler 定时任务的基本使用-4-cron触发器的使用

1、前言

cron触发器,当前时间与cron表达式匹配时,执行任务,等同于UNIX 的cron。官网cron

2、参数说明

参数如下,除了add_job的通用参数外,特有以下参数:

  • year (int|str) – 4-digit year

  • month (int|str) – month (1-12)

  • day (int|str) – day of month (1-31)

  • week (int|str) – ISO week (1-53)

  • day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)

  • hour (int|str) – hour (0-23)

  • minute (int|str) – minute (0-59)

  • second (int|str) – second (0-59)

  • start_date - 指定开始时间 (datetime|str) – starting point for the interval calculation

    • 可以是datetime对象、date对象、"%Y-%m-%d %H:%M:%S"的字符串
  • end_date - 指定结束时间

    • 可以是datetime对象、date对象、"%Y-%m-%d %H:%M:%S"的字符串
  • timezone - 时区,中国就用'Asia/Shanghai'就行

  • jitter 时间偏移量,单位秒

    • 在预定运行时间的基础上,加上一个随机的秒数

      例如 预定运行时间为10:20:20 偏移量为10 则真实运行时间期间为[10:20:20-10:20:30]

配合下图表达式使用

image-20230323150558286

import datetime
import threading

from apscheduler.schedulers.blocking import BlockingScheduler

"""
类似Unix的cron执行任务 匹配cron表达式时执行任务
https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html#module-apscheduler.triggers.cron

参数
year (int|str) – 4-digit year
month (int|str) – month (1-12)
day (int|str) – day of month (1-31)
week (int|str) – ISO week (1-53)
day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)
hour (int|str) – hour (0-23)
minute (int|str) – minute (0-59)
second (int|str) – second (0-59)
start_date (datetime|str) – earliest possible date/time to trigger on (inclusive)
end_date (datetime|str) – latest possible date/time to trigger on (inclusive)
timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone)
jitter (int|None) – delay the job execution by jitter seconds at most
"""


def log(msg):
    t = threading.currentThread()
    name = t.name
    ident = t.ident
    print(f"[{ident}][{name}]{msg}")  # 打印线程号和线程名称


def my_job(msg):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log(f"现在时间:{now}, 消息:{msg}")
    for job in scheduler.get_jobs():
        print(job, job.id)


def second():
    # 每两秒
    scheduler.add_job(my_job, 'cron', args=('每两秒',), second='*/2')


def second_5():
    # 每分钟的5秒
    scheduler.add_job(my_job, 'cron', args=('每分钟的5秒',), second='5')


def second_3_5():
    # 每分钟的3,5秒
    scheduler.add_job(my_job, 'cron', args=('每分钟的3,5秒',), second='3,5')


def start_end():
    start_date = datetime.datetime.now() + datetime.timedelta(seconds=10)
    end_date = datetime.datetime.now() + datetime.timedelta(seconds=80)
    scheduler.add_job(my_job, 'cron', args=('start_end',), second='*/2', start_date=start_date, end_date=end_date)


if __name__ == '__main__':
    log(f'我是主线程, 现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
    shanghai = 'Asia/Shanghai'
    scheduler = BlockingScheduler()  # 默认存储在内存,执行线程最大10个
    scheduler.configure(timezone=shanghai)

    # second()
    # second_3_5()
    start_end()

    for one in scheduler.get_jobs():
        print(one, one.id)

    scheduler.start()
    # 使用了BlockingScheduler 则无法执行start后面的代码

github

标签:apscheduler,python,datetime,cron,int,job,str,date
From: https://www.cnblogs.com/rainbow-tan/p/17250882.html

相关文章

  • 聊聊Python中的GIL https://www.cnblogs.com/ArsenalfanInECNU/p/9968621.html
    抄自:https://www.cnblogs.com/ArsenalfanInECNU/p/9968621.htmlGIL的全称是GlobalInterpreterLock,全局解释器锁。因为Python的执行依赖于解释器。Python最初的设计理......
  • PYTHON - 正则表达式
    1.1正则正则表达式(RegularExpression),在代码中是预先定义好的一个规则串,这个规则串可以匹配,查找,替换那些符合规则的文本。1.2正则表达式字符串正则表达式的字符串由......
  • 和chatgpt的对话,写一个python脚本
    我:写一个python脚本。实现如下功能:1.通过调用openaiapi和chatgpt连续对话;2.创建chat模式的程序;3.用户在终端输入字符和命令的方式和chatgpt对话;4.程序的输出界面要有好;5.......
  • python的数据类型的转换
    1num=input('请输入一个小数:')#返回的是字符串类型的数据2print(num,type(num))3print(int(num),type(int(num)))4print(num,type(num))5print(int(float(......
  • 用python创建文件data.txt,共100行,每行循环存放一个1~100之间的整数。
      1list1=[]2f=open('data.txt',mode='a',encoding='utf-8')3withopen('data.txt',mode='a',encoding='utf-8'):4forrrrinrange(1,101):......
  • python读取linux服务下载数据文件
    importparamiko#pipinstallcx_Oracle-ihttps://mirrors.aliyun.com/pypi/simple/host='ip'port=22username='账户'password='密码'remote_path='服......
  • python读取ddl生成sql建表语句
    #导入需要的库importpandasaspdimportosdefread_ddl_create_tab_sql(file_path:str,table_name:str):df=pd.read_csv(file_path,sep='\|\@\|',index_col......
  • python对整个目录下面的所有文件进行处理的代码
    对整个目录里面的所有文件进行处理.实用场景:1)在整个目录下的文件中,哪些文件中有某个关键字出现2)备份某个目录下面的文件,比如:按照建立日期或者文件名按照月份进行......
  • 使用 Python 探索 感知机 算法
    动动发财的小手,点个赞吧!从理论到实践,我们将从简要的理论介绍开始研究感知机(器)学习方法,然后实现。在这篇博文的最后,您将能够了解何时以及如何使用这种机器学习算法,清楚......
  • Python多进程代码调试工具
    https://github.com/Lightning-AI/forked-pdbimportsysimportpdbclassForkedPdb(pdb.Pdb):"""PDBSubclassfordebuggingmulti-processedcodeSug......