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通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
python 打印对象的所有属性值的方法
Sep 11 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
Python通过future处理并发问题
Oct 17 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
python素数筛选法浅析
Mar 19 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 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/04 咖啡文化
php若干单维数组遍历方法的比较
2011/09/20 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
鼠标图片振动代码
2006/07/06 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
js实现图片上传到服务器和回显
2020/01/19 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python去除所有html标签的方法
2015/05/05 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python的Tqdm模块的使用
2018/01/10 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
python如何读写csv数据
2018/03/21 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
linux面试题参考答案(6)
2016/06/23 面试题
上课打牌的检讨书
2014/02/15 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
广告业务员岗位职责
2015/02/13 职场文书
Linux中各个目录的作用与内容
2022/06/28 Servers