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中IPYTHON入门实例
May 11 Python
python任务调度实例分析
May 19 Python
Python多线程和队列操作实例
Jun 21 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
python爬虫实战之最简单的网页爬虫教程
Aug 13 Python
Python探索之SocketServer详解
Oct 28 Python
python查询mysql,返回json的实例
Mar 26 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
python 伯努利分布详解
Feb 25 Python
用python开发一款操作MySQL的小工具
May 12 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使用array_search函数实现数组查找的方法
2015/06/12 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
利用python实现数据分析
2017/01/11 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
用python与文件进行交互的方法
2018/03/01 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python实现飞机大战项目
2020/03/11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
应届生简历中的自我评价
2014/01/13 职场文书
超市员工辞职信范文
2015/05/12 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL