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编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
python使用插值法画出平滑曲线
Dec 15 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
python3使用GUI统计代码量
Sep 18 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
Python基础之进程详解
May 21 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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应用技巧
2008/03/27 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
Laravel find in set排序实例
2019/10/09 PHP
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python matplotlib拟合直线的实现
2019/11/19 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
python GUI模拟实现计算器
2020/06/22 Python
如何在python中实现线性回归
2020/08/10 Python
Python实现京东抢秒杀功能
2021/01/25 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
商场主管竞聘书
2014/03/31 职场文书
社区活动总结报告
2014/05/05 职场文书
五一口号
2014/06/19 职场文书
授权委托书
2014/07/31 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
个人政治思想总结
2015/03/05 职场文书
图书馆义工感想
2015/08/07 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技