def execute(self, task, args=None): status = TaskStatus() status.id = 'LOCAL-' + task.id status.args = args if args is not None else task.args try: result = task.execute(args) status.code = TaskStatus.CODE_EXECUTION_SUCCESS status.message = "OK" status.result = result except Exception as e: status.code = TaskStatus.CODE_EXECUTION_FAILED status.message = str(e) return status
def execute(self, task, args=None): # set arguments if args is not None: task.args = args # initialize status status = TaskStatus() status.host = self.host with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # sending task request try: s.connect((self.host, self.port)) s.settimeout(1) status.id = task.id s.sendall(task.serialize()) data = s.recv(1024) s.settimeout(self.timeout) except Exception as e: status.code = TaskStatus.CODE_REQUEST_TIME_OUT status.message = str(e) return status temp = None try: status = pickle.loads(data) status.host = self.host status.id = task.id if status.code == TaskStatus.CODE_REQUEST_SUCCESS: data = s.recv(2048) temp = data status = pickle.loads(data) status.host = self.host status.id = task.id except Exception as e: status.code = TaskStatus.CODE_SERVER_ERROR status.message = str(e) try: s.close() except Exception as e: print(str(e)) return status
def handle(conn): # receiving task object request = conn.recv(1024) try: task = pickle.loads(request) status_code, status_message, task_id = TaskStatus.CODE_REQUEST_SUCCESS, 'OK', task.id except Exception as e: status_code, status_message, task_id = TaskStatus.CODE_REQUEST_FAILED, str( e), None # send status status = TaskStatus(status_code, status_message) status.id = task_id status.args = task.args try: conn.sendall(status.serialize()) except Exception as e: status_code, status_message, task_id = TaskStatus.CODE_REQUEST_FAILED, str( e), None # execute task if status_code == TaskStatus.CODE_REQUEST_SUCCESS: try: result_data = task.execute() status.code = TaskStatus.CODE_EXECUTION_SUCCESS status.result = result_data conn.sendall(status.serialize()) print(task_id, 'success') except Exception as e: try: status.code = TaskStatus.CODE_EXECUTION_FAILED status.message = str(e) conn.sendall(status.serialize()) except: pass conn.close()