<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def sendMsg(self, *messageParts, **kwargs):
 """ Send request and deliver response back when available. :param messageParts: message data :type messageParts: tuple :param timeout: as keyword argument, timeout on request :type timeout: float :return: Deferred that will fire when response comes back """

        messageId = self._getNextId()
        d = defer.Deferred(canceller=lambda _: self._cancel(messageId))

        timeout = kwargs.pop('timeout', None)
        if timeout is None:
            timeout = self.defaultRequestTimeout
        assert len(kwargs) == 0, "Unsupported keyword argument"

        canceller = None
        if timeout is not None:
            canceller = reactor.callLater(timeout, self._timeoutRequest,
                                          messageId)

        self._requests[messageId] = (d, canceller)
        self.send([messageId, b''] + list(messageParts))
        return d