def METHOD_NAME(self, fn, *args, **kwargs):
    # if idle threads are available, don't spin new threads
    if self.has_idle_threads():
        return super(AdaptiveThreadPool, self).METHOD_NAME(fn, *args, **kwargs)
    def _run(*tmpargs):
        return fn(*args, **kwargs)
    thread = start_worker_thread(_run)
    return thread.result_future