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 ...
随机推荐
- 7.3 自定义镜像-运行nginx与tomcat并结合PV/PVC/NFS以实现动静分离示例
1.在NFS SERVER上为tomcat.nginx创建相关目录 NFS SERVER的部署配置参考:https://www.cnblogs.com/yanql/p/15410308.html 1. ...
- Codeforces 582D - Number of Binominal Coefficients(Kummer 定理+数位 dp)
Codeforces 题目传送门 & 洛谷题目传送门 一道数论与数位 dp 结合的神题 %%% 首先在做这道题之前你需要知道一个定理:对于质数 \(p\) 及 \(n,k\),最大的满足 \( ...
- 【shell】真正解决syntax error:unexpected end of file?
今天写了个较长的shell脚本,结构嵌套比较多,最后运行时,出现了syntax error: unexpected end of file的错误. 这个之前碰到过,经常在win系统转移脚本文件到uni ...
- python-django-常用models里面的Field
1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一个自增列,必须设置primary_key=True. 2.mode ...
- python-django-ORM模型
ORM模型: Object Relational Mapping 对象关系映射 配置引擎的时候最好直接复制: DATABASES = { 'default': { 'ENGINE': 'django. ...
- nginx 文件目录页面
开启文件目录 server { listen 80; #设置自己静态目录的访问域名 server_name xxx.xxxx.com; #防止页面中文乱码一定要在utf-8前面加上gbk,顺序很重要 ...
- 亿级Web系统搭建:单机到分布式集群
亿级Web系统搭建:单机到分布式集群 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压 ...
- 云原生时代的 APM
作者 | 刘浩杨 来源|尔达 Erda 公众号 APM 的全称是 Application Performance Management(应用性能管理),早在 90 年代中期就有厂商提出性能管理的概念 ...
- A Child's History of England.18
But, although she was a gentle lady, in all things worthy to be beloved - good, beautiful, sensible, ...
- Fllin(七)【Flink CDC实践】
目录 FlinkCDC 1.简介 2.依赖 3.flink stream api 4.flink sql 5.自定义反序列化器 6.打包测试 FlinkCDC 1.简介 CDC是Change Data ...