一:在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文件内容

最新文章

  1. Google play(Android market)账户申请
  2. ecshop后台admin路径怎么修改
  3. HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)
  4. RESTful API 设计最佳实践(转)
  5. Selenium用户扩展
  6. Apache的rewrite规则详细介绍
  7. SurfaceView的使用
  8. Lucence_Curd
  9. VisualSVN 5.1.7破译License Key
  10. Linux批量处理文件脚本
  11. linux-2.6.18源码分析笔记---信号
  12. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器
  13. C# HtmlAgilityPack 爬虫框架
  14. 【转载】在linux下别用zip 用tar来压缩文件 zip解压后还是utf-8 window10是GBK
  15. c# maiform父窗体改变动态的gridew 奇偶行变色的快捷方法
  16. PHP匿名函数
  17. Dockerfile技巧
  18. CVE-2010-2883
  19. 【读书笔记】SpringBoot读书笔记
  20. python json dumps loads

热门文章

  1. Django-website 程序案例系列-8 html模板文件详解
  2. BZOJ2144跳跳棋——LCA+二分
  3. BZOJ5252 八省联考2018林克卡特树(动态规划+wqs二分)
  4. EF 更新 删除
  5. day24 新三级菜单
  6. 搜索Ex
  7. 批量修改sharepoint 2013站点里区域设置
  8. 【转】__int64 与long long 的区别
  9. Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况
  10. opencv 霍夫变换 实现图片旋转角度计算