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 ...
随机推荐
- vue指令v-for报错:Elements in iteration expect to have 'v-bind:key' directives.eslint-plugin-vue
文件–>首选项–>设置–>在搜索框中输入:vetur.validation.template,取消勾选.
- 『学了就忘』Linux权限管理 — 53、ACL权限详解
目录 1.什么是ACL权限 2.开启ACL 3.ACL权限的相关命令 (1)设定ACL权限 (2)查询文件的ACL权限 (3)设置文件ACL权限给用户组 (4)给文件夹和里边的文件同时赋予ACL权限 ...
- Codeforces 1406E - Deleting Numbers(根分+数论)
Codeforces 题面传送门 & 洛谷题面传送门 一道个人感觉挺有意思的交互题,本人一开始想了个奇奇怪怪的做法,还以为卡不进去,结果发现竟然过了,而且还是正解( 首先看到这类题目可以考虑每 ...
- Cycling City CF521E
Cycling City 毒瘤题 首先建dfs树,由于是个无向图所有返祖边都是连向祖先的. 判是否有解其实很简单,只要图不是一个仙人掌就有解了. 仙人掌有关可以看这个博客 但是这道题由于要输出路径成功 ...
- Augustus指南(Trainning部分)
Augustus指南 官方 Tutorial Index Augustus是一个真核生物基因预测软件,目前有网页服务端和本地版,它基于Hidden-Markov Model(隐马尔科夫链模型HMM)( ...
- msql_5.6.46编译问题
初始化数据库的时候, 使用mysql_install_db 必须是再mysql安装的目录下用相对路径去进行初始化 CentOs6.9必须先把/etc/my.cnf 先改为其他名字,之后再把安装目录下s ...
- Hive-删除表(drop、truncate的区别)
Hive删除操作主要分为几大类:删除数据(保留表).删除库表.删除分区.我将以下图为例清空iot_devicelocation中的数据,之后再删除表.库等. 解释: use xpu123; #使用 ...
- shell 脚本的基本定义
注意不能有控制,指令之间 [1]shell脚本的基础知识 (1)shell脚本的本质 编译型语言 解释型语言 shell脚本语言是解释型语言 shell脚本的本质 shell命令的有序集合 (2)sh ...
- Flume(一)【概述】
目录 一.Flume定义 二.Flume基础架构 1.Agent 2.Source 3.Sink 4.Channel 5.Event 一.Flume定义 Flume是Cloudera公司提供的一个 ...
- 【Reverse】每日必逆0x03
BUU-刮开有奖 附件:https://files.buuoj.cn/files/abe6e2152471e1e1cbd9e5c0cae95d29/8f80610b-8701-4c7f-ad60-63 ...