4444 NodeType ,
4545 ShapeLike ,
4646 ZarrFormat ,
47- get_global_semaphore ,
4847 parse_shapelike ,
4948)
5049from zarr .core .config import config
@@ -1441,13 +1440,10 @@ async def _members(
14411440 )
14421441
14431442 raise ValueError (msg )
1444- # Use global semaphore for process-wide concurrency limiting
1445- semaphore = get_global_semaphore ()
14461443 async for member in _iter_members_deep (
14471444 self ,
14481445 max_depth = max_depth ,
14491446 skip_keys = skip_keys ,
1450- semaphore = semaphore ,
14511447 use_consolidated_for_children = use_consolidated_for_children ,
14521448 ):
14531449 yield member
@@ -3324,13 +3320,11 @@ async def create_nodes(
33243320 The created nodes in the order they are created.
33253321 """
33263322
3327- # Use global semaphore for process-wide concurrency limiting
3328- semaphore = get_global_semaphore ()
33293323 create_tasks : list [Coroutine [None , None , str ]] = []
33303324
33313325 for key , value in nodes .items ():
33323326 # make the key absolute
3333- create_tasks .extend (_persist_metadata (store , key , value , semaphore = semaphore ))
3327+ create_tasks .extend (_persist_metadata (store , key , value ))
33343328
33353329 created_object_keys = []
33363330
@@ -3476,28 +3470,16 @@ def _ensure_consistent_zarr_format(
34763470 )
34773471
34783472
3479- async def _getitem_semaphore (
3480- node : AsyncGroup , key : str , semaphore : asyncio .Semaphore | None
3481- ) -> AnyAsyncArray | AsyncGroup :
3473+ async def _getitem (node : AsyncGroup , key : str ) -> AnyAsyncArray | AsyncGroup :
34823474 """
3483- Wrap Group.getitem with an optional semaphore.
3484-
3485- If the semaphore parameter is an
3486- asyncio.Semaphore instance, then the getitem operation is performed inside an async context
3487- manager provided by that semaphore. If the semaphore parameter is None, then getitem is invoked
3488- without a context manager.
3475+ Fetch a child node from a group by key.
34893476 """
3490- if semaphore is not None :
3491- async with semaphore :
3492- return await node .getitem (key )
3493- else :
3494- return await node .getitem (key )
3477+ return await node .getitem (key )
34953478
34963479
34973480async def _iter_members (
34983481 node : AsyncGroup ,
34993482 skip_keys : tuple [str , ...],
3500- semaphore : asyncio .Semaphore | None ,
35013483) -> AsyncGenerator [tuple [str , AnyAsyncArray | AsyncGroup ], None ]:
35023484 """
35033485 Iterate over the arrays and groups contained in a group.
@@ -3508,8 +3490,6 @@ async def _iter_members(
35083490 The group to traverse.
35093491 skip_keys : tuple[str, ...]
35103492 A tuple of keys to skip when iterating over the possible members of the group.
3511- semaphore : asyncio.Semaphore | None
3512- An optional semaphore to use for concurrency control.
35133493
35143494 Yields
35153495 ------
@@ -3520,10 +3500,7 @@ async def _iter_members(
35203500 keys = [key async for key in node .store .list_dir (node .path )]
35213501 keys_filtered = tuple (filter (lambda v : v not in skip_keys , keys ))
35223502
3523- node_tasks = tuple (
3524- asyncio .create_task (_getitem_semaphore (node , key , semaphore ), name = key )
3525- for key in keys_filtered
3526- )
3503+ node_tasks = tuple (asyncio .create_task (_getitem (node , key ), name = key ) for key in keys_filtered )
35273504
35283505 for fetched_node_coro in asyncio .as_completed (node_tasks ):
35293506 try :
@@ -3550,7 +3527,6 @@ async def _iter_members_deep(
35503527 * ,
35513528 max_depth : int | None ,
35523529 skip_keys : tuple [str , ...],
3553- semaphore : asyncio .Semaphore | None = None ,
35543530 use_consolidated_for_children : bool = True ,
35553531) -> AsyncGenerator [tuple [str , AnyAsyncArray | AsyncGroup ], None ]:
35563532 """
@@ -3565,8 +3541,6 @@ async def _iter_members_deep(
35653541 The maximum depth of recursion.
35663542 skip_keys : tuple[str, ...]
35673543 A tuple of keys to skip when iterating over the possible members of the group.
3568- semaphore : asyncio.Semaphore | None
3569- An optional semaphore to use for concurrency control.
35703544 use_consolidated_for_children : bool, default True
35713545 Whether to use the consolidated metadata of child groups loaded
35723546 from the store. Note that this only affects groups loaded from the
@@ -3585,7 +3559,7 @@ async def _iter_members_deep(
35853559 new_depth = None
35863560 else :
35873561 new_depth = max_depth - 1
3588- async for name , node in _iter_members (group , skip_keys = skip_keys , semaphore = semaphore ):
3562+ async for name , node in _iter_members (group , skip_keys = skip_keys ):
35893563 is_group = isinstance (node , AsyncGroup )
35903564 if (
35913565 is_group
@@ -3599,9 +3573,7 @@ async def _iter_members_deep(
35993573 yield name , node
36003574 if is_group and do_recursion :
36013575 node = cast ("AsyncGroup" , node )
3602- to_recurse [name ] = _iter_members_deep (
3603- node , max_depth = new_depth , skip_keys = skip_keys , semaphore = semaphore
3604- )
3576+ to_recurse [name ] = _iter_members_deep (node , max_depth = new_depth , skip_keys = skip_keys )
36053577
36063578 for prefix , subgroup_iter in to_recurse .items ():
36073579 async for name , node in subgroup_iter :
@@ -3811,9 +3783,7 @@ async def get_node(store: Store, path: str, zarr_format: ZarrFormat) -> AnyAsync
38113783 raise ValueError (f"Unexpected zarr format: { zarr_format } " ) # pragma: no cover
38123784
38133785
3814- async def _set_return_key (
3815- * , store : Store , key : str , value : Buffer , semaphore : asyncio .Semaphore | None = None
3816- ) -> str :
3786+ async def _set_return_key (* , store : Store , key : str , value : Buffer ) -> str :
38173787 """
38183788 Write a value to storage at the given key. The key is returned.
38193789 Useful when saving values via routines that return results in execution order,
@@ -3828,31 +3798,23 @@ async def _set_return_key(
38283798 The key to save the value to.
38293799 value : Buffer
38303800 The value to save.
3831- semaphore : asyncio.Semaphore | None
3832- An optional semaphore to use to limit the number of concurrent writes.
38333801 """
3834-
3835- if semaphore is not None :
3836- async with semaphore :
3837- await store .set (key , value )
3838- else :
3839- await store .set (key , value )
3802+ await store .set (key , value )
38403803 return key
38413804
38423805
38433806def _persist_metadata (
38443807 store : Store ,
38453808 path : str ,
38463809 metadata : ArrayV2Metadata | ArrayV3Metadata | GroupMetadata ,
3847- semaphore : asyncio .Semaphore | None = None ,
38483810) -> tuple [Coroutine [None , None , str ], ...]:
38493811 """
38503812 Prepare to save a metadata document to storage, returning a tuple of coroutines that must be awaited.
38513813 """
38523814
38533815 to_save = metadata .to_buffer_dict (default_buffer_prototype ())
38543816 return tuple (
3855- _set_return_key (store = store , key = _join_paths ([path , key ]), value = value , semaphore = semaphore )
3817+ _set_return_key (store = store , key = _join_paths ([path , key ]), value = value )
38563818 for key , value in to_save .items ()
38573819 )
38583820
0 commit comments