2009 brian quinlan licensed to psf under a contributor agreement execute computations asynchronously using threads or processes brian quinlan briansweetapp com from concurrent futures base import firstcompleted firstexception allcompleted cancellederror timeouterror invalidstateerror brokenexecutor future executor wait ascompleted all firstcompleted firstexception allcompleted cancellederror timeouterror brokenexecutor future executor wait ascompleted processpoolexecutor threadpoolexecutor def dir return all doc def getattrname global processpoolexecutor threadpoolexecutor if name processpoolexecutor from process import processpoolexecutor as pe processpoolexecutor pe return pe if name threadpoolexecutor from thread import threadpoolexecutor as te threadpoolexecutor te return te raise attributeerrorfmodule name r has no attribute name r 2009 brian quinlan licensed to psf under a contributor agreement execute computations asynchronously using threads or processes
__author__ = 'Brian Quinlan (brian@sweetapp.com)'

from concurrent.futures._base import (FIRST_COMPLETED,
                                      FIRST_EXCEPTION,
                                      ALL_COMPLETED,
                                      CancelledError,
                                      TimeoutError,
                                      InvalidStateError,
                                      BrokenExecutor,
                                      Future,
                                      Executor,
                                      wait,
                                      as_completed)

__all__ = (
    'FIRST_COMPLETED',
    'FIRST_EXCEPTION',
    'ALL_COMPLETED',
    'CancelledError',
    'TimeoutError',
    'BrokenExecutor',
    'Future',
    'Executor',
    'wait',
    'as_completed',
    'ProcessPoolExecutor',
    'ThreadPoolExecutor',
)


def __dir__():
    return __all__ + ('__author__', '__doc__')


def __getattr__(name):
    global ProcessPoolExecutor, ThreadPoolExecutor

    if name == 'ProcessPoolExecutor':
        from .process import ProcessPoolExecutor as pe
        ProcessPoolExecutor = pe
        return pe

    if name == 'ThreadPoolExecutor':
        from .thread import ThreadPoolExecutor as te
        ThreadPoolExecutor = te
        return te

    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")