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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。