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正则表达式操作指南(re使用)
Sep 06 Python
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
python解析json串与正则匹配对比方法
Dec 20 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
python命令 -u参数用法解析
Oct 24 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
php的debug相关函数用法示例
2016/07/11 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
python 列表降维的实例讲解
2018/06/28 Python
python调用百度REST API实现语音识别
2018/08/30 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
施工资料员的岗位职责
2013/12/22 职场文书
办理护照介绍信
2014/01/16 职场文书
预备党员转正考核材料
2014/06/03 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
战马观后感
2015/06/08 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
Java的Object类的九种方法
2022/04/13 Java/Android