def _async_callback(self, callback, *args, **kwargs):
        if args or kwargs:
            callback = functools.partial(callback, *args, **kwargs)

        def wrapper(*args, **kwargs):
            try:
                return callback(*args, **kwargs)
            except Exception:
                logging.error('Uncaught exception', exc_info=True)
                self._abort()
        return wrapper
called from client thread with a Timer object
dataset/ETHPy150Open benoitc/gaffer/gaffer/httpclient/websocket.py/WebSocket._async_callback--crossover with--dataset/ETHPy150Open datastax/python-driver/cassandra/connection.py/TimerManager.add_timer