def begin_disconnection(self, conn_or_internal_id, callback, timeout):
        """Begin a disconnection attempt

        Args:
            conn_or_internal_id (string, int): Either an integer connection id or a string
                internal_id
            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
        }

        action = ConnectionAction('begin_disconnection', data, timeout=timeout, sync=False)
        self._actions.put(action)