理论概念:https://zhuanlan.zhihu.com/p/95563033

BlockingScheduler与BackgroundScheduler区别 :https://www.jianshu.com/p/b829a920bd33

apscheduler 设置循环任务:每隔5S 提交一次监控数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time,os,sys #定时提交,循环睡眠用 import atexit # 需要先安装导入包
# pip install requests
# pip install requests-aws4auth
import requests
from requests_aws4auth import AWS4Auth
import logging,datetime
BASE_DIR = os.path.dirname(__file__)
print(BASE_DIR)
sys.path.append(BASE_DIR)
print(sys.path)
from monitor.monitor import Monitor
import sys ,json
# import Queue
import threading
import time logger = logging.getLogger("mylogger")
logger.setLevel("DEBUG")
ch = logging.StreamHandler()
ch.setLevel("DEBUG")
logger.addHandler(ch) logger.debug("推送监控数据-----")
region = 'cn-beijing-6'
service = 'monitor'
host = 'http://%s.%s.api.ksyun.com' % (service, region)
headers = {
'Accept': 'Application/json'
}
# 自己的ak/sk
ak = "XXXXXXXXXXXXXXX"
sk = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# debug 输出调试信息
logger.debug("region:" + region + ",service:" + service + ",host:" + host + ",ak:" + ak + ",sk:" + sk)
credentials = {
'ak': ak,
'sk': sk
}
def auth():
return AWS4Auth(credentials['ak'], credentials['sk'], region, service) query = {
'Action': 'PutMetricData',
'Version': '2017-07-01'
} def getUtcTimeStampStr():
utctime = time.gmtime()
utc_str = time.strftime("%Y-%m-%dT%H:%M:%SZ", utctime)
# utc_str = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
return utc_str def get_data():
m = Monitor()
cpu_info, mem_info, swap_info = m.cpu(), m.mem(), m.swap()
utc_time = getUtcTimeStampStr()
json_data = [
{
"namespace": "ZMD_Host_Monitor",
"metricName": "cpu_percent",
"timestamp": utc_time,
"value": cpu_info.get('percent_avg'),
"dimensions": [
"product=Zmd_Host_Monitor",
"apiname=zmd_cpu_test"
],
"unit": "Percent"
},
{
"namespace": "ZMD_Host_Monitor",
"metricName": "mem_percent",
"timestamp": utc_time,
"value": mem_info.get('percent'),
"dimensions": [
"product=Zmd_Mem_Monitor",
"apiname=zmd_mem_test"
],
"unit": "Percent"
},
{
"namespace": "ZMD_Host_Monitor",
"metricName": 'mem_total',
"timestamp": utc_time,
"value": mem_info.get('total'),
"dimensions": [
"product=Zmd_Mem_Monitor",
"apiname=zmd_mem_test"
],
"unit": "Gigabytes"
},
{
"namespace": "ZMD_Host_Monitor",
"metricName": 'mem_used',
"timestamp": utc_time,
"value": mem_info.get('used'),
"dimensions": [
"product=Zmd_Mem_Monitor",
"apiname=zmd_mem_test"
],
"unit": "Gigabytes"
},
{
"namespace": "ZMD_Host_Monitor",
"metricName": "mem_free",
"timestamp": utc_time,
"value": mem_info.get('free'),
"dimensions": [
"product=Zmd_Mem_Monitor",
"apiname=zmd_mem_test"
],
"unit": "Gigabytes"
}
]
logger.debug(json_data)
return json_data #启动入口
if __name__ == "__main__":
from apscheduler.schedulers.blocking import BlockingScheduler
# from apscheduler.jobstores.mongodb import MongoDBJobStore
# from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.jobstores.redis import RedisJobStore
import redis
import pickle def my_job(id='my_job'):
response = requests.post(host, params=query, headers=headers, auth=auth(), json=get_data())
logger.debug(response.text)
print(id, '-->', datetime.datetime.now()) connect_args = {
'host': '192.168.1.8',
'port': 6379,
'password': ''
}
jobstores = {
'default': RedisJobStore(db=13,
jobs_key='apscheduler.jobs',
run_times_key='apscheduler.run_times',
pickle_protocol=pickle.HIGHEST_PROTOCOL,
**connect_args)
}
# executors = {
# 'default': ThreadPoolExecutor(10),
# 'processpool': ProcessPoolExecutor(5)
# }
# job_defaults = {
# 'coalesce': False,
# 'max_instances': 3
# }
# scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults,
# timezone="Asia/Shanghai")
########
# jobstores = {
# 'default': MemoryJobStore() # 使用内存作为作业存储
# }
executors = {
'default': ThreadPoolExecutor(20),
'processpool': ProcessPoolExecutor(10)
}
job_defaults = {
'coalesce': True, # 重启后作业如果被堆叠,只执行一次
'max_instances': 3
}
scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
scheduler.add_job(my_job, args=['job_interval', ], id='job_interval', trigger='interval', seconds=5,
replace_existing=True)
# scheduler.add_job(my_job, args=['job_cron', ], id='job_cron', trigger='cron', month='4-8,11-12', hour='20-23', second='*/10', \
# end_date='2020-6-16')
# scheduler.add_job(my_job, args=['job_once_now', ], id='job_once_now')
# scheduler.add_job(my_job, args=['job_date_once', ], id='job_date_once', trigger='date',
# run_date='2020-6-15 08:34:00')
try:
scheduler.start()
except SystemExit:
print('exit')
exit()

apscheduler 设置python脚本定时任务的更多相关文章

  1. pycharm设置python脚本模板

    PyCharm PyCharm是一个有名的Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成 ...

  2. Linux下设置python脚本文件为服务

    (最简单的方式nohup python xxx.py) ------------------------------------------------------------------------ ...

  3. APScheduler(Python化的Cron)使用总结 定时任务

    APScheduler(Python化的Cron)使用总结 简介 APScheduler全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架.它允许你像Cr ...

  4. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

  5. Python脚本控制的WebDriver 常用操作 <四> 设置浏览器大小

    下面将使用webdriver来控制浏览器窗口的大小 测试用例场景 设置浏览器窗口的大小有下面两个比较常见的用途: 在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试 ...

  6. Python脚本控制的WebDriver 常用操作 <二十八> 超时设置和cookie操作

    超时设置 测试用例场景 webdriver中可以设置很多的超时时间 implicit_wait.识别对象时的超时时间.过了这个时间如果对象还没找到的话就会抛出异常 Python脚本 ff = webd ...

  7. linux下设置计划任务执行python脚本

    linux下设置计划任务执行python脚本 简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自 ...

  8. 设置eclipse中python脚本的编码格式

    今天在运行python脚本时报如下错误: SyntaxError: Non-ASCII character '\xe5' in file D:\pythonlearn1\src\day01\direc ...

  9. python学习 —— 获取系统运行情况信息并在Linux下设置定时运行python脚本

    代码: # -*- coding:utf-8 -*- from psutil import * def cpu_usage_rate(): for i, j in zip(range(1, cpu_c ...

随机推荐

  1. Electron快速入门之事件

    const { app, BrowserWindow } = require('electron') function createWindow () {   const win = new Brow ...

  2. Maven的pom.xml的格式与约束

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. 学军中学csp-noip2020模拟5

    Problem List(其实这几场全是附中出的) 这场比赛的题目相当有价值,特别是前两题,相当的巧妙. A.路径二进制 数据范围这么小,当然是搜索. \(30pts:\)大力搜索出奇迹,最后统计答案 ...

  4. spring security 授权方式(自定义)及源码跟踪

    spring security 授权方式(自定义)及源码跟踪 ​ 这节我们来看看spring security的几种授权方式,及简要的源码跟踪.在初步接触spring security时,为了实现它的 ...

  5. Bedtools如何比较两个参考基因组注释版本的基因?

    目录 问题 思路 问题 原问题来自:How to calculate overlapping genes between two genome annotation versions? 其实可分为两个 ...

  6. C++常用的字符串处理函数-全

    这是自己用stl实现的一些字符串处理函数和常用的字符串处理技巧,经验正基本无误,可直接使用,若有问题,可相应列出 包括:split string to int int to string join # ...

  7. A Child's History of England.11

    CHAPTER 4 ENGLAND UNDER ATHELSTAN AND THE SIX BOY-KINGS Athelstan, the son of Edward the Elder, succ ...

  8. day05 django框架之路由层

    day05 django框架之路由层 今日内容概要 简易版django请求声明周期流程图(重要) 路由匹配 无名有名分组 反向解析 无名有名解析 路由分发 名称空间 伪静态 虚拟环境 简易版djang ...

  9. 学习Vue源码前的几项必要储备(二)

    7项重要储备 Flow 基本语法 发布/订阅模式 ES6+ 语法 原型链.闭包 函数柯里化 event loop 接上讲 聊到了ES6的几个重要语法,加下来到第四点继续开始. 4.原型链.闭包 原型链 ...

  10. 【leetcode】834. Sum of Distances in Tree(图算法)

    There is an undirected connected tree with n nodes labeled from 0 to n - 1 and n - 1 edges. You are ...