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提取内容关键词的方法
Mar 16 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
python 输出所有大小写字母的方法
Jan 02 Python
Python远程视频监控程序的实例代码
May 05 Python
使用Python函数进行模块化的实现
Nov 15 Python
通过自学python能找到工作吗
Jun 21 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 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
模仿OSO的论坛(三)
2006/10/09 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
yii中widget的用法
2014/12/03 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
PHP实现简易图形计算器
2020/08/28 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
python encode和decode的妙用
2009/09/02 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
快速了解Python开发环境Spyder
2020/06/29 Python
办理退休介绍信
2014/01/09 职场文书
入党自我评价范文
2014/02/02 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS