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中处理字符串之isdecimal()方法的使用
May 20 Python
Python程序运行原理图文解析
Feb 10 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python微医挂号网医生数据抓取
Jan 24 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
python实现静态服务器
Sep 05 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
零基础学python应该从哪里入手
Aug 11 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与SQL注入攻击[二]
2007/04/17 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php实现水仙花数示例分享
2014/04/03 PHP
Yii配置文件用法详解
2014/12/04 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
javascript 常用功能总结
2012/03/18 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
wxPython 入门教程
2008/10/07 Python
用python写asp详细讲解
2013/12/16 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
支行行长竞聘演讲稿
2014/05/15 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis