python基于json文件实现的gearman任务自动重启代码实例
一:在gearman任务失败后,调用task_failed
deftask_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分钟内的重启次数
defcheck_frequency(task): instance=TaskReloadMonitor() now=time.time() task_info=instance.open(task.lower()) ifnottask_info: return worker=task_info.get('worker') last_time=task_info.get('last_time') ifnotlast_time: task_info['timer']=1 task_info['last_time']=now instance.write() task_reload(task,worker,task_info['timer']) return ifint(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') ifnot(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命令
deftask_reload(task,worker,timer): fromcoursepoints.settingsimportBASE_DIR manage=os.path.join(BASE_DIR,'manage.py') datetime=local_datetime() command='python{}{}'.format(manage,worker) subprocess.Popen(command,shell=True) text='-->taskreload:{}\n-->timer:{}\n-->{}'.format(task,timer,datetime) print(text)
json文件读写
classTaskReloadMonitor(): def__init__(self): pass @property defpath(self): path=Path(__file__).parent.joinpath('task.json') returnpath defopen(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) returntask_info exceptExceptionase: print(e) returnNone defwrite(self): try: f=open(self.path,'w',encoding='utf8') data=json.dumps(self.task_data) f.write(data) f.close() exceptExceptionase: 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 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。