python scheduler

scheduler简介

scheduler提供了基于日期、固定时间间隔以及crontab 类型的任务;
我们可以在主程序的运行过程中快速增加新作业或删除旧作业;
如果把作业存储在数据库中,那么作业的状态会被保存,当调度器重启时,不必重新添加作业,作业会恢复原状态继续执行。

参考连接

参考连接一
参考连接二
apscheduler两种调度器BackgroundScheduler和BlockingScheduler的区别

获得任务列表:get_jobs

安装

pip install apscheduler

基本概念介绍

触发器:调度逻辑,描述作业何时被触发,按照【日期date】,【时间间隔interval】,【固定时间点cron】触发作业。
存储器:默认情况下,任务存放在内存中。也可以配置存放在不同类型的数据库中。
如果任务存放在数据库中,那么任务的存取有一个序列化和反序列化的过程,同时修改和搜索任务的功能也是由任务储存器实现。
执行器:将指定job放到线程池或者进程池中执行,执行完后通知调度器。
调度器:用户操作调度器,调度器控制触发器,存储器,执行器。用户不接触存储器,执行器,调度器。
在这里插入图片描述

项目实例

# 定时器
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
def jobs():
    print(1)

import datetime

# 初始化文件读取器
Logging.log_info_print('程序启动')
config_init = configparser.ConfigParser()
path = os.path.dirname(os.path.abspath(__file__))  # gd
# path = os.path.split(os.path.realpath(__file__))[0]
Logging.log_info_print('配置文件路径为:' + path)
config_init.read(os.path.join(path, 'config/config.ini'), encoding='utf-8-sig')

# 盘中-读取定时器配置
start_date = datetime.datetime.now().strftime('%Y-%m-%d') + " " + config_init.get("Board_event", "start_date")
end_date = datetime.datetime.now().strftime('%Y-%m-%d') + " " + config_init.get("Board_event", "end_date")
intervals = config_init.get("Board_event", "intervals")

# 盘后-读取定时器配置
run_date_after = datetime.datetime.now().strftime('%Y-%m-%d') + " " + config_init.get("Board_after", "run_date")

# 交易日设置
tradingDay = config_init.get("TradingDay", "tradingDay")
if tradingDay == "":
    tradingDay = datetime.datetime.now().strftime('%Y%m%d')

# 创建定时调度器
sched = BackgroundScheduler()

# 时间间隔
interval_trigger = IntervalTrigger(seconds=int(intervals), start_date=start_date, end_date=end_date)



# 任务函数
def job_board():
    print('盘中')
    # 引用全局变量
    global is_run_board
    global calc_engine_object
    if is_run_board == False:
        is_run_board = True
        try:
            calc_engine_object = EquityProfitCalc(oracle_risk, oracle_O32, stockinfo_table, schema, stock4re_view,
                                                  tradingDay)
            Logging.log_info_print('盘中数据初始化成功')
        except Exception as ex:
            logging.error('盘中数据初始化错误,程序停止')
            sys.exit()

# 调用方法,目的是解决调度器的线程问题
def jobs():
    job_board()
    # 期权保证金
    job_optionmargin()

sched.add_job(jobs, interval_trigger, id='jobs')
sched.start()
#############################################################################

interval 触发器

参数 说明
weeks (int) 间隔几周
days (int) 间隔几天
hours (int) 间隔几小时
minutes (int) 间隔几分钟
seconds (int) 间隔多少秒
start_date (datetime 或 str) 开始日期
end_date (datetime 或 str) 结束日期
timezone (datetime.tzinfo 或str) 时区

每隔两分钟执行一次 job_func 方法
scheduler .add_job(job_func, 'interval', minutes=2)

在 2017-12-13 14:00:01 ~ 2017-12-13 14:00:10 之间, 每隔两分钟执行一次 job_func 方法
scheduler .add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')

cron 触发器:
参数 说明
year (int 或 str) 年,4位数字
month (int 或 str) 月 (范围1-12)
day (int 或 str) 日 (范围1-31
week (int 或 str) 周 (范围1-53)
day_of_week (int 或 str) 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun)
hour (int 或 str) 时 (范围0-23)
minute (int 或 str) 分 (范围0-59)
second (int 或 str) 秒 (范围0-59)
start_date (datetime 或 str) 最早开始日期(包含)
end_date (datetime 或 str) 最晚结束时间(包含)
timezone (datetime.tzinfo 或str) 指定时区

在每年 1-3、7-9 月份中的每个星期一、二中的 00:00, 01:00, 02:00 和 03:00 执行 job_func 任务
scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值