python基于json文件实现的gearman任务自动重启代码实例
2019-08-13 11:10
1181 查看
一:在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 } }
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- python 实现自动远程登陆scp文件实例代码
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
- 基于Python实现的扫雷游戏实例代码
- Python实现树莓派WiFi断线自动重连的实例代码
- Python实现截取PDF文件中的几页代码实例
- python基于paramiko将文件上传到服务器代码实现
- 将C++代码全部写到头文件:)python脚本帮助自动生成相应的实现文件初始框架
- Python实现基于HTTP文件传输实例
- Python 输出json到文件,让json.dumps输出中文 实例代码
- python基于秒速赛 车平台出 租自动下拉git代码并重启程序模块。
- python+selenium实现自动抢票功能实例代码
- Python实现多线程下载文件的代码实例
- 基于Python实现的扫雷游戏实例代码
- 基于python实现jenkins自动发布代码平台 推荐
- 能分析压缩的日志,且基于文件输入的PYTHON代码实现
- Python实现基于HTTP文件传输实例
- 基于nodejs+express4.X实现文件下载的实例代码
- 基于python实现jenkins自动发布代码平台
- 基于html5+java实现大文件上传实例代码
- 使用python脚本自动创建pip.ini配置文件代码实例