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之总结参数的传递
Oct 10 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
python实现串口自动触发工作的示例
Jul 02 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
python实现同一局域网下传输图片
Mar 20 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
Django restful framework生成API文档过程详解
Nov 12 Python
浅析Django接口版本控制
Jun 26 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php若干单维数组遍历方法的比较
2011/09/20 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php数组添加元素方法小结
2014/12/20 PHP
php经典算法集锦
2015/11/14 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
Use Word to Search for Files
2007/06/15 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
js面向对象的写法
2016/02/19 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
编程语言Python的发展史
2014/09/26 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
python记录程序运行时间的三种方法
2017/07/14 Python
Python Requests库基本用法示例
2018/08/20 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
python实现xml转json文件的示例代码
2020/12/30 Python
解释下面关于J2EE的名词
2013/11/15 面试题
实习生单位鉴定意见
2013/12/04 职场文书
给领导的检讨书
2014/02/16 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
中秋寄语大全
2014/04/11 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
功夫熊猫观后感
2015/06/10 职场文书
2016年清明节寄语
2015/12/04 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js