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 相关文章推荐
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
Python判断字符串与大小写转换
Jun 08 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
python将一组数分成每3个一组的实例
Nov 14 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
python 执行终端/控制台命令的例子
Jul 12 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
Python hmac模块使用实例解析
Dec 24 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 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
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
电厂厂长岗位职责
2014/01/02 职场文书
重阳节登山活动方案
2014/02/03 职场文书
产品开发计划书
2014/04/27 职场文书
爱的教育观后感
2015/06/17 职场文书
学校标语口号大全
2015/12/26 职场文书
比较node.js和Deno
2021/04/27 Javascript
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript