| 
									
										
										
										
											2010-09-18 22:35:02 +00:00
										 |  |  | # 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, | 
					
						
							| 
									
										
										
										
											2018-05-30 02:15:06 -05:00
										 |  |  |                                       InvalidStateError, | 
					
						
							| 
									
										
										
										
											2017-11-04 11:05:49 +01:00
										 |  |  |                                       BrokenExecutor, | 
					
						
							| 
									
										
										
										
											2010-09-18 22:35:02 +00:00
										 |  |  |                                       Future, | 
					
						
							|  |  |  |                                       Executor, | 
					
						
							|  |  |  |                                       wait, | 
					
						
							|  |  |  |                                       as_completed) | 
					
						
							| 
									
										
										
										
											2018-01-20 09:54:42 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | __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': | 
					
						
							| 
									
										
										
										
											2018-01-26 10:53:31 +09:00
										 |  |  |         from .process import ProcessPoolExecutor as pe | 
					
						
							|  |  |  |         ProcessPoolExecutor = pe | 
					
						
							|  |  |  |         return pe | 
					
						
							| 
									
										
										
										
											2018-01-20 09:54:42 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if name == 'ThreadPoolExecutor': | 
					
						
							| 
									
										
										
										
											2018-01-26 10:53:31 +09:00
										 |  |  |         from .thread import ThreadPoolExecutor as te | 
					
						
							|  |  |  |         ThreadPoolExecutor = te | 
					
						
							|  |  |  |         return te | 
					
						
							| 
									
										
										
										
											2018-01-20 09:54:42 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     raise AttributeError(f"module {__name__} has no attribute {name}") |