|
|
|
|
|
|
|
|
|
|
|
"""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__} has no attribute {name}") |
|
|
|