def _execute_now(): for ip in ips: Common.create_thread(func=self.exec_start_impl, args=(ip, uploads[ip], params[ip])) logger.info( "execute_start {} for {}, params:{}, uploads:{}".format( self.task, ip, params[ip], uploads[ip]))
def upload_file(self, ssh, ip, uploads, offset): # 不直接在上传的callback中调用更新状态的Caller,因为会影响上传的速度, # callback中只更新内存,状态更新在一个线程中定时去调用 def upload_back(current, total): size[0] = current size[1] = total def get_progress(): return int(size[0] / size[1] * offset) def update_thread(): while not is_done: self.return_exec_start_result(ip, get_progress(), '', True) Common.sleep(0.2) size, is_done = [0, 1], False server_upload = Global.G_SERVER_UPLOAD % model_gate.settings_data.server_dir for local in uploads: remote = "{0}/{1}".format(server_upload, Common.basename(local)) Common.create_thread(func=update_thread, args=()) self.insert_text_info(ip, get_progress(), 'Uploading {}'.format(local)) ret, err = SSHUtil.upload_file(ssh, local, remote, upload_back) is_done = True if not ret: self.insert_text_info( ip, get_progress(), 'Upload {} failed: {}'.format(local, err), 'ERROR') self.return_exec_start_result(ip, get_progress(), '', False) return False self.return_exec_start_result(ip, get_progress(), '', True) return True
def press_bar_handle(key): if key == 'TB_EXPAND': tree_inst.expand_trees() elif key in ['TB_ABOUT', "MENU_ABOUT"]: TopAbout() elif key in ['TB_SCREEN', 'MENU_SCREEN']: ScreenShot() elif key in ['TB_HELP', 'MENU_HELP']: pdf = 'SystemController.pdf' if not Common.is_file(pdf): WidgetTip.error('{}不存在,请确认!'.format(pdf)) return Common.create_thread(lambda: Common.system_open(pdf)) elif key in ['MENU_SET', 'TB_SET']: GuiSettings.pack() elif key == 'MENU_EXIT': app_gate.close() elif key == 'TB_LAST': tree_inst.last() elif key == 'TB_NEXT': tree_inst.next() elif key in ["MENU_WHITE", "MENU_BLACK"]: WidgetTip.info("敬请期待 !") else: # 根据界面 image 值即可进入对应界面 # tree_inst.selection(key)
def set_data(self, data, asynccall=False): def func(args=None): self._instance.data = data if asynccall: Common.create_thread(func=func) else: func()
def click_login(): def async_login(args=None): self.login_handle() try: login_btn.disable(False) except: pass login_btn.disable(True) Common.create_thread(func=async_login)
def pack_sub_foot_fm(): def update_info(): while True: time.sleep(60) sec = time.time() - app_gate.start_time run_time = '软件运行时长 {} 小时 {} 分钟'.format( int(sec / 3600), int((sec % 3600) / 60)) text = "{} {}".format(use_time, run_time) label['text'] = text use_time = '软件启动耗时 %.3f 秒' % app_gate.use_time run_time = '软件运行时长 0 小时 0 分钟' Common.create_thread(update_info) label = tk.Label(foot_fm, text="{} {}".format(use_time, run_time)) label.pack()
def execute_start(self, data): def _execute_now(): for ip in ips: Common.create_thread(func=self.exec_start_impl, args=(ip, uploads[ip], params[ip])) logger.info( "execute_start {} for {}, params:{}, uploads:{}".format( self.task, ip, params[ip], uploads[ip])) def for_delay_loop(): if delay and not self._mutex('DELAY'): model_gate.exception_data.set_data("已经存在延迟任务\n如需重置,请先点击'停止'") return if loop and not self._mutex('LOOP'): model_gate.exception_data.set_data("已经存在循环任务\n如需重置,请先点击'停止'") return if delay: start_time = Common.time() while True: if self.is_break: return Common.sleep(1) left_sec = delay * 60 - int(Common.time() - start_time) left_sec = 0 if left_sec < 0 else left_sec model_gate.delay_loop_timer_data.set_data( [left_sec, left_sec]) if left_sec == 0: self._mutex('DELAY', False) break _execute_now() if loop: start_time = Common.time() while True: if self.is_break: return Common.sleep(1) left_sec = loop * 60 - int(Common.time() - start_time) left_sec = 0 if left_sec < 0 else left_sec model_gate.delay_loop_timer_data.set_data([0, left_sec]) if left_sec == 0: _execute_now() start_time = Common.time() ips, script, root, delay, loop, params, uploads = data self.init(script, root, True) Common.create_thread(for_delay_loop)
def execute_enter(self, data): ips, script = data self.init(script, True, False) for ip in ips: Common.create_thread(func=self.exec_enter_impl, args=(ip, )) logger.info("execute_enter {} for {}".format(self.task, ip))