一:在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)
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
}
}

json文件内容

基于json文件实现的gearman任务自动重启的更多相关文章

  1. Spring Boot 自动重启(spring-boot-devtools)

    原文 https://github.com/x113773/testall/issues/8 1. 首先添加依赖```<dependency><groupId>org.spri ...

  2. nodejs本地服务器自动重启

    在我们开发node 应用的时候,一但你的应用已经启动了,这个时候如果你修改了服务端的文件,那么要是这个修改起作用,你必须手动停止服务然后再重新启动,这在开发过程中无疑是很烦人的一件事,最好是有一个能够 ...

  3. 十一、Node.js监听代码改动自动重启node插件supervisor

    我们慢慢地发现,每次我们稍微改变js代码都需要重启服务才能在浏览器显示新的效果,很麻烦,这里我们可以通过npm命令安装supervisoror插件,安装方法如下 之前章节我们知道安装了nodejs就会 ...

  4. 模糊查询基于select遍历json文件自动填充的实现

    HTML页面 <tr> <td align="left"><span>案由</span> <input type=" ...

  5. 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  6. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  7. 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件

    根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...

  8. 使用grunt-init自动创建gruntfile.js和package.json文件

    使用grunt-init可以自动创建gruntfile.js和package.json文件.下面说一下过程: 1.全局安装grunt-init npm install -g grunt-init 2. ...

  9. pycharm 打开json 文件 \2 自动成了转义字符

    打开json 文件 \2 自动成了转义字符 暂时只发现在( \2 ) \ 后面为数字的情况下会出现转义json 文件为是指:在pycharm 中新建 file 后缀为json的文件 如: 1234.j ...

随机推荐

  1. xml文件格式化后不能获取到值

    在有些时候,我们要使用到xml文件,必须得将文件中的内容压缩成一行,才能读取到其中的值,一旦有换行符.制表符.空格之类的就读不到.所以只能在开发好以后,将代码压缩再执行,十分不方便. 尝试了几个替换符 ...

  2. 【BZOJ1816】[CQOI2010]扑克牌(二分,贪心)

    [BZOJ1816][CQOI2010]扑克牌(二分,贪心) 题面 BZOJ 题解 看了一眼这题,怎么这么眼熟?woc,原来\(xzy\)的题目是搬的这道啊... 行,反正我考的时候也切了,这数据范围 ...

  3. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告

    P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

  4. 装VS2012失败

    有一种可能的问题是:注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_R ...

  5. 树莓派上使用DHCPig进行DHCP池耗尽攻击

    安装DHCPig 这个工具依赖Python的Scapy包,如果未安装需要使用pip工具安装. wget https://github.com/kamorin/DHCPig/raw/master/pig ...

  6. 洛谷P1600 天天爱跑步

    天天放毒... 首先介绍一个树上差分. 每次进入的时候记录贡献,跟出来的时候的差值就是子树贡献. 然后就可以做了. 发现考虑每个人的贡献有困难. 于是考虑每个观察员的答案. 把路径拆成两条,以lca分 ...

  7. 求n(n>=2)以内的质数/判断一个数是否质数——方法+细节优化

    #include <stdio.h> #include <stdlib.h> //判断i是否质数,需要判断i能否被(long)sqrt(i)以内的数整除 //若i能被其中一个质 ...

  8. 2018.10.2浪在ACM 集训队第二次测试赛

    2018.10.26 浪在ACM 集训队第二次测试赛 题目一览表 来源 考察知识点 A 1273 海港 NOIP 普及组 2016 差分数组+二分 B 1274 魔法阵     C 1267 金币   ...

  9. MQ与webservice的区别,MQ的区别

    Webservice 和MQ(MessageQueue)都是解决跨平台通信的常用手段,两者有哪些区别呢? 个人认为最本质的区别在于 Webservice近乎实时通信,而MQ却通常是延时通信. 什么意思 ...

  10. Study 5 —— CSS概述

    CSS(Cascading Style Sheet)称为层叠样式表,也可以称为CSS样式表或样式表,其文件扩展名为.css,CSS是用于增强或控制网页样式,并允许将样式信息与网页内容分离的一种标记性语 ...