示例#1
0
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()