mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 0a28c0d12e
			
		
	
	
		0a28c0d12e
		
	
	
	
	
		
			
			Future.set_result and Future.set_exception now raise InvalidStateError if the futures are not pending or running. This mirrors the behavior of asyncio.Future, and prevents AssertionErrors in asyncio.wrap_future when set_result is called multiple times.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			53 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}")
 |