python基于json文件实现的gearman任务自动重启代码实例


Posted in Python onAugust 13, 2019

一:在gearman任务失败后,调用task_failed

def task_failed(task, *args):
  info = '\n'.join(args)
  datetime = local_datetime()
  text = '{} FAILED:\n{}\n当前响应worker已关闭\n{}\n-->【{}】'.format(task, info, datetime, task)
  print(text)
  check_frequency(task)

二:打印失败信息后,调用check_frequency检查任务5分钟内的重启次数

def check_frequency(task):
  instance = TaskReloadMonitor()
  now = time.time()
  task_info = instance.open(task.lower())
  if not task_info:
    return
  worker = task_info.get('worker')
  last_time = task_info.get('last_time')
  if not last_time:
    task_info['timer'] = 1
    task_info['last_time'] = now
    instance.write()
    task_reload(task, worker, task_info['timer'])
    return
  if int(now) - int(last_time) > 300:
    task_info['timer'] = 1
    task_info['last_time'] = now
    instance.write()
    task_reload(task, worker, task_info['timer'])
    return
  timer = task_info.get('timer')
  if not (timer + 1 > 3):
    task_info['timer'] = timer + 1
    task_info['last_time'] = now
    instance.write()
    task_reload(task, worker, task_info['timer'])

三:确认重启任务后,利用subprocess重启任务,subprocess.Popen方法可以非阻塞运行cmd命令

def task_reload(task, worker, timer):
  from coursepoints.settings import BASE_DIR
  manage = os.path.join(BASE_DIR, 'manage.py')
  datetime = local_datetime()
  command = 'python {} {}'.format(manage, worker)
  subprocess.Popen(command, shell=True)
  text = '-->task reload:{}\n-->timer:{}\n-->{}'.format(task, timer, datetime)
  print(text)

json文件读写

class TaskReloadMonitor():
  def __init__(self):
    pass
  @property
  def path(self):
    path = Path(__file__).parent.joinpath('task.json')
    return path
  def open(self, task):
    try:
      f = open(self.path, 'r', encoding='utf8')
      data = json.loads(f.read())
      f.close()
      self.task_data = data
      task_info = data.get(task)
      return task_info
    except Exception as e:
      print(e)
      return None
  def write(self):
    try:
      f = open(self.path, 'w', encoding='utf8')
      data = json.dumps(self.task_data)
      f.write(data)
      f.close()
    except Exception as e:
      print(e)

json文件内容

{
 "pptconvert": {
  "worker": "pptconvert",
  "timer": 1,
  "last_time": 1555356612.9220166
 },
 "screencapture": {
  "worker": "screencapture",
  "timer": 0
 },
 "snapscreen": {
  "worker": "snapscreen",
  "timer": 1,
  "last_time": 1555441223.166838
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
django批量导入xml数据
Oct 16 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
【python】matplotlib动态显示详解
Apr 11 Python
python内存动态分配过程详解
Jul 15 Python
超简单的Python HTTP服务
Jul 22 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
判断Python中的Nonetype类型
May 25 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 #Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 #Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 #Python
Django项目中实现使用qq第三方登录功能
Aug 13 #Python
一篇文章搞定Python操作文件与目录
Aug 13 #Python
Python Django Cookie 简单用法解析
Aug 13 #Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 #Python
You might like
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP学习之PHP变量
2006/10/09 PHP
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
JS中类或对象的定义说明
2014/03/10 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python中turtle作图示例
2017/11/15 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python使用knn实现特征向量分类
2018/12/26 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
五型班组建设方案
2014/02/10 职场文书
迟到早退检讨书
2014/02/10 职场文书
教师节活动主持词
2014/04/02 职场文书
推荐信格式范文
2014/05/09 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书