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 25 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
python 弧度与角度互转实例
Apr 15 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
Python实现查找数据库最接近的数据
Jun 08 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
pandas中DataFrame检测重复值的实现
May 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
Protoss兵种对照表
2020/03/14 星际争霸
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
php简单的会话类代码
2011/08/08 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
vue实现分页组件
2020/06/16 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
JS实现多功能计算器
2020/10/28 Javascript
python 文件与目录操作
2008/12/24 Python
Python编码时应该注意的几个情况
2013/03/04 Python
python提取字典key列表的方法
2015/07/11 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python多项式回归的实现方法
2019/03/11 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
八年级数学教学反思
2014/01/31 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
Python包argparse模块常用方法
2021/06/04 Python
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python