Source code for zarr.sync

import os
from collections import defaultdict
from threading import Lock

import fasteners


[docs]class ThreadSynchronizer: """Provides synchronization using thread locks.""" def __init__(self): self.mutex = Lock() self.locks = defaultdict(Lock) def __getitem__(self, item): with self.mutex: return self.locks[item] def __getstate__(self): return True def __setstate__(self, *args): # reinitialize from scratch self.__init__()
[docs]class ProcessSynchronizer: """Provides synchronization using file locks via the `fasteners <https://fasteners.readthedocs.io/en/latest/api/inter_process/>`_ package. Parameters ---------- path : string Path to a directory on a file system that is shared by all processes. N.B., this should be a *different* path to where you store the array. """ def __init__(self, path): self.path = path def __getitem__(self, item): path = os.path.join(self.path, item) lock = fasteners.InterProcessLock(path) return lock
# pickling and unpickling should be handled automatically