Skip to content

Commit e7c84a7

Browse files
committed
Provide lock for FileManagers
1 parent 2d63c37 commit e7c84a7

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

xarray/backends/file_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,13 +355,15 @@ def __init__(
355355
opener: Callable[..., T_File],
356356
*args: Any,
357357
mode: Any = _OMIT_MODE,
358+
lock: Lock | None | Literal[False] = None,
358359
kwargs: Mapping[str, Any] | None = None,
359360
):
360361
kwargs = {} if kwargs is None else dict(kwargs)
361362
self._opener = opener
362363
self._args = args
363364
self._mode = "a" if mode == "w" else mode
364365
self._kwargs = kwargs
366+
self._lock = lock
365367

366368
# Note: No need for locking with PickleableFileManager, because all
367369
# opening of files happens in the constructor.

xarray/backends/netCDF4_.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ def __init__(
419419
"argument is provided"
420420
)
421421
root = manager
422-
manager = DummyFileManager(root)
422+
manager = DummyFileManager(root, lock=NETCDF4_PYTHON_LOCK)
423423

424424
self._manager = manager
425425
self._group = group
@@ -508,17 +508,18 @@ def open(
508508
"<xarray-in-memory-write>", mode=mode, memory=memory, **kwargs
509509
)
510510
close = _CloseWithCopy(filename, nc4_dataset)
511-
manager = DummyFileManager(nc4_dataset, close=close)
511+
manager = DummyFileManager(nc4_dataset, close=close, lock=lock)
512512

513513
elif isinstance(filename, bytes | memoryview):
514514
assert mode == "r"
515515
kwargs["memory"] = filename
516516
manager = PickleableFileManager(
517-
netCDF4.Dataset, "<xarray-in-memory-read>", mode=mode, kwargs=kwargs
517+
netCDF4.Dataset, "<xarray-in-memory-read>", mode=mode, kwargs=kwargs,
518+
lock=lock
518519
)
519520
else:
520521
manager = CachingFileManager(
521-
netCDF4.Dataset, filename, mode=mode, kwargs=kwargs
522+
netCDF4.Dataset, filename, mode=mode, kwargs=kwargs, lock=lock
522523
)
523524
return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
524525

0 commit comments

Comments
 (0)