# Copyright 2009 Brian Quinlan. All Rights Reserved. | |
# Licensed to PSF under a Contributor Agreement. | |
"""Execute computations asynchronously using threads or processes.""" | |
__author__ = 'Brian Quinlan ([email protected])' | |
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__} has no attribute {name}") | |