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 pickle模块用法实例分析
May 27 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
使用pycharm生成代码模板的实例
May 23 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
详解python中的time和datetime的常用方法
Jul 08 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
Python中的__init__作用是什么
Jun 09 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
Nov 01 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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中的Session和Cookie
2013/06/21 PHP
zend framework重定向方法小结
2016/05/28 PHP
PHP加密技术的简单实现
2016/09/04 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
es6数值的扩展方法
2019/03/11 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python中几种操作字符串的方法的介绍
2015/04/09 Python
浅谈python对象数据的读写权限
2016/09/12 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
大学生的创业计划书就该这么写
2014/01/30 职场文书
幼师个人总结范文
2015/02/28 职场文书
董事会决议范本
2015/07/01 职场文书
2016小学新学期寄语
2015/12/04 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
Python日志模块logging用法
2022/06/05 Python