54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
# 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}")
|