def begin_operation(self, conn_or_internal_id, op_name, callback, timeout):
        """Begin an operation on a connection

        Args:
            conn_or_internal_id (string, int): Either an integer connection id or a string
                internal_id
            op_name (string): The name of the operation that we are starting (stored in
                the connection's microstate)
            callback (callable): Callback to call when this disconnection attempt either
                succeeds or fails
            timeout (float): How long to allow this connection attempt to proceed
                without timing it out (in seconds)
        """

        data = {
            'id': conn_or_internal_id,
            'callback': callback,
            'operation_name': op_name
        }

        action = ConnectionAction('begin_operation', data, timeout=timeout, sync=False)
        self._actions.put(action)
Begin an operation on a connection

        Args:
            conn_or_internal_id (string, int): Either an integer connection id or a string
                internal_id
            op_name (string): The name of the operation that we are starting (stored in
                the connection's microstate)
            callback (callable): Callback to call when this disconnection attempt either
                succeeds or fails
            timeout (float): How long to allow this connection attempt to proceed
                without timing it out (in seconds)