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中用get()方法获取字典键值的教程
May 21 Python
Python中Class类用法实例分析
Nov 12 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
pandas 选择某几列的方法
Jul 03 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
Python对象的属性访问过程详解
Mar 05 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
python适合做数据挖掘吗
Jun 16 Python
python IP地址转整数
Nov 20 Python
Python内置数据类型中的集合详解
Mar 18 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
Javascript 布尔型分析
2008/12/22 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
Python 串口读写的实现方法
2019/06/12 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
致800米运动员广播稿
2014/02/16 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
个人承诺书
2014/03/26 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL