| # Copyright 2009 Brian Quinlan. All Rights Reserved. |
| # 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__} has no attribute {name}") |