首页 > 编程 > Python > 正文

python基于json文件实现的gearman任务自动重启代码实例

2019-11-25 12:00:20
字体:
来源:转载
供稿:网友

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表