mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 20:51:26 +00:00 
			
		
		
		
	 a5a7f5e16d
			
		
	
	
		a5a7f5e16d
		
			
		
	
	
	
	
		
			
			This is an implementation of InterpreterPoolExecutor that builds on ThreadPoolExecutor. (Note that this is not tied to PEP 734, which is strictly about adding a new stdlib module.) Possible future improvements: * support passing a script for the initializer or to submit() * support passing (most) arbitrary functions without pickling * support passing closures * optionally exec functions against __main__ instead of the their original module
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.9 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',
 | |
|     'InvalidStateError',
 | |
|     'BrokenExecutor',
 | |
|     'Future',
 | |
|     'Executor',
 | |
|     'wait',
 | |
|     'as_completed',
 | |
|     'InterpreterPoolExecutor',
 | |
|     'ProcessPoolExecutor',
 | |
|     'ThreadPoolExecutor',
 | |
| )
 | |
| 
 | |
| 
 | |
| def __dir__():
 | |
|     return __all__ + ('__author__', '__doc__')
 | |
| 
 | |
| 
 | |
| def __getattr__(name):
 | |
|     global ProcessPoolExecutor, ThreadPoolExecutor, InterpreterPoolExecutor
 | |
| 
 | |
|     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
 | |
| 
 | |
|     if name == 'InterpreterPoolExecutor':
 | |
|         try:
 | |
|             from .interpreter import InterpreterPoolExecutor as ie
 | |
|         except ModuleNotFoundError:
 | |
|             ie = InterpreterPoolExecutor = None
 | |
|         else:
 | |
|             InterpreterPoolExecutor = ie
 | |
|         return ie
 | |
| 
 | |
|     raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
 |