apscheduler 设置python脚本定时任务
理论概念: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脚本定时任务的更多相关文章
- pycharm设置python脚本模板
PyCharm PyCharm是一个有名的Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成 ...
- Linux下设置python脚本文件为服务
(最简单的方式nohup python xxx.py) ------------------------------------------------------------------------ ...
- APScheduler(Python化的Cron)使用总结 定时任务
APScheduler(Python化的Cron)使用总结 简介 APScheduler全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架.它允许你像Cr ...
- celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)
一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...
- Python脚本控制的WebDriver 常用操作 <四> 设置浏览器大小
下面将使用webdriver来控制浏览器窗口的大小 测试用例场景 设置浏览器窗口的大小有下面两个比较常见的用途: 在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试 ...
- Python脚本控制的WebDriver 常用操作 <二十八> 超时设置和cookie操作
超时设置 测试用例场景 webdriver中可以设置很多的超时时间 implicit_wait.识别对象时的超时时间.过了这个时间如果对象还没找到的话就会抛出异常 Python脚本 ff = webd ...
- linux下设置计划任务执行python脚本
linux下设置计划任务执行python脚本 简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自 ...
- 设置eclipse中python脚本的编码格式
今天在运行python脚本时报如下错误: SyntaxError: Non-ASCII character '\xe5' in file D:\pythonlearn1\src\day01\direc ...
- python学习 —— 获取系统运行情况信息并在Linux下设置定时运行python脚本
代码: # -*- coding:utf-8 -*- from psutil import * def cpu_usage_rate(): for i, j in zip(range(1, cpu_c ...
随机推荐
- (前端)面试300问之(3)this的指向判断
一.this的相关理解与解读 1.各角度看this. 1)ECMAScript规范: this 关键字执行为当前执行环境的 ThisBinding. 2)MDN: In most cases, the ...
- shiro 学习笔记
1. 权限管理 1.1 什么是权限管理? 权限管理实现对用户访问系统的控制,按照安全规则或者安全策略,可以控制用户只能访问自己被授权的资源 权限管理包括用户身份认证和授权两部分,简称认证授权 1.2 ...
- Golang进阶,揉碎数据库中间件,干货满满!
目录 必读 一.Centos7.Mac安装MySQL 二.主从复制原理 2.1.基于binlog_filename + position 2.2.基于GTID 三.my.cnf 四.测试SQL 五.中 ...
- Python之用型号构成一个三角形代码
#coding=utf-8 #******直角三角形*********** #左下角三角形 for i in range(1,6): print '*'*i print "=&quo ...
- Java设计模式之(十三)——模板方法模式
1.什么是模板模式? Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. ...
- Codeforces 338E - Optimize!(Hall 定理+线段树)
题面传送门 首先 \(b_i\) 的顺序肯定不会影响匹配,故我们可以直接将 \(b\) 数组从小到大排个序. 我们考虑分析一下什么样的长度为 \(m\) 的数组 \(a_1,a_2,\dots,a_m ...
- Codeforces 891D - Sloth(换根 dp)
Codeforces 题面传送门 & 洛谷题面传送门 换根 dp 好题. 为啥没人做/yiw 首先 \(n\) 为奇数时答案显然为 \(0\),证明显然.接下来我们着重探讨 \(n\) 是偶数 ...
- Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) 题解
竟然上 GM 了,incredible( A 首先如果 \(2050\nmid n\) 那显然就 \(-1\) 了,否则答案显然为 \(\dfrac{n}{2050}\) 的各位数字和. B 显然这个 ...
- expr计算字符串长度
命令:expr length "quanzhiqinag" #!/bin/bash for N in quan zhi qiang do if [ `expr length $N ...
- mongDB进阶
Mongo进阶 聚合 聚合操作将来自多个文档的值组合在一起,并且可以对分组数据执行各种操作以返回单个结果. 文档进入多阶段管道,将文档转换为聚合结果 聚合管道 例子: 第一阶段:过滤,$match 第 ...