123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # 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',
- 'InvalidStateError',
- '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}")
|