'Adds a callback to be run once after timeout_milliseconds.
Returns a callable that removes the callback if called.'

def add_timeout_callback(self, callback, timeout_milliseconds, cleanup=None):

    if (callback in self._timeout_callbacks):
        raise ValueError('Callback    added    as    a    timeout    twice')
    handle = self._loop.call_later((timeout_milliseconds / 1000.0), self._wrap_timeout(callback))
    def remover():
        self._loop.remove_timeout(handle)
        self._remover(callback, self._timeout_callbacks, cleanup)
    self._timeout_callbacks[callback] = remover
    return remover
