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比较两个列表大小的方法
Jul 11 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
python 统计代码行数简单实例
May 04 Python
详谈python http长连接客户端
Jun 12 Python
python中int与str互转方法
Jul 02 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
python实现淘宝购物系统
Oct 25 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
基于django micro搭建网站实现加水印功能
May 22 Python
7个关于Python的经典基础案例
Nov 07 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP n个不重复的随机数生成代码
2009/06/23 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP实现合并discuz用户
2015/08/05 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python输出指定月份日历的方法
2015/04/23 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
机关党建工作汇报材料
2014/08/20 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
mysql部分操作
2021/04/05 MySQL
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS