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-router的安装和使用
第一种方式(简单):新建项目时用 vue-cli 手动选择 router 安装. 1.用键盘 ↓ 移动选择第三项" Manually select features"(手动配置): ...
- 洛谷 P3714 - [BJOI2017]树的难题(点分治)
洛谷题面传送门 咦?鸽子 tzc 竟然来补题解了?incredible( 首先看到这样类似于路径统计的问题我们可以非常自然地想到点分治.每次我们找出每个连通块的重心 \(x\) 然后以 \(x\) 为 ...
- GWAS分析结果中pvalue/p.ajust为0时如何处理?
在GWAS分析的结果中,偶尔会遇到到pvalue为0的SNP位点,这时如果直接做曼哈顿或QQ图,会出错,因为log0无意义. 此时,该如何处理? 如果你用的是Plink1.9来做的GWAS,可加一个参 ...
- 端口TCP——简介
cmd命令:telnet 如果需要搭建外网可访问的网站,可以顺便勾选HTTP,HTTPS端口:
- python爬虫之正则表达式(用在其他地方也可)
1. 常用的匹配规则 ### 常用的匹配规则 # \w 匹配字母.数字及下划线 # \W 匹配不是字母.数字及下划线的字符 # \s 匹配任意空白字符,等价于[\t\n\t\f] # \S 匹配任意非 ...
- cmd查看同一个局域网内电脑IP
win+R,cmd #快速打开cmd窗口 net view #查看本地局域网内开启了哪些计算机共享 运行后可以看到已共享的计算机名称 net view ip #查看对方局域网内开启了哪些共享 ...
- KEPServeEX 6与KepOPC中间件测试
KEPServeEX 6可以组态服务器端和客户端连接很多PLC以及具有OPC服务器的设备,以下使用KEPServeEX 6建立一个OPC UA服务器,然后使用KepOPC建立客户端来连接服务器做测试. ...
- Bootstrap实战 - 瀑布流布局
讲 Bootstrap 基础的教程网上已经很多了,实际上 Bootstrap 中文网(bootcss.com)里的文档已经写的很详细了,但实战的案例却不多.这里用一些当前流行的网页布局为导向,使用 B ...
- hive向mysql导入数据sqoop命令出错
报错信息: java.lang.Exception: java.io.IOException: java.lang.ClassNotFoundException: info at org.apache ...
- idea 启动debug的时候throw new ClassNotFoundException(name)
idea 启动debug的时候throw new ClassNotFoundException(name) 启动debug就跳转到此界面 解决办法 这个方法只是忽略了抛异常的点,并没有真正解决问题.后 ...