Don't hold lock on initial client construction
							parent
							
								
									3ebb7ab6b1
								
							
						
					
					
						commit
						b2eacb85d4
					
				|  | @ -22,7 +22,6 @@ from typing import Dict | |||
| from contextlib import asynccontextmanager, AsyncExitStack | ||||
| 
 | ||||
| import trio | ||||
| import tractor | ||||
| 
 | ||||
| from . import get_brokermod | ||||
| from ..log import get_logger | ||||
|  | @ -30,10 +29,12 @@ from ..log import get_logger | |||
| 
 | ||||
| log = get_logger(__name__) | ||||
| 
 | ||||
| _cache: Dict[str, 'Client'] = {} | ||||
| 
 | ||||
| _cache: Dict[str, 'Client'] = {}  # noqa | ||||
| 
 | ||||
| 
 | ||||
| @asynccontextmanager | ||||
| async def get_cached_client( | ||||
| async def open_cached_client( | ||||
|     brokername: str, | ||||
|     *args, | ||||
|     **kwargs, | ||||
|  | @ -74,10 +75,11 @@ async def get_cached_client( | |||
|             client._exit_stack = exit_stack | ||||
|             clients[brokername] = client | ||||
| 
 | ||||
|             yield client | ||||
|         yield client | ||||
| 
 | ||||
|     finally: | ||||
|         client._consumers -= 1 | ||||
|         if client._consumers <= 0: | ||||
|             # teardown the client | ||||
|             await client._exit_stack.aclose() | ||||
|         if client is not None: | ||||
|             # if no more consumers, teardown the client | ||||
|             client._consumers -= 1 | ||||
|             if client._consumers <= 0: | ||||
|                 await client._exit_stack.aclose() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue