MCPcopy
hub / github.com/microsoft/qlib / reader_lock

Method reader_lock

qlib/data/cache.py:257–281  ·  view source on GitHub ↗
(redis_t, lock_name: str)

Source from the content-addressed store, hash-verified

255 @staticmethod
256 @contextlib.contextmanager
257 def reader_lock(redis_t, lock_name: str):
258 current_cache_rlock = redis_lock.Lock(redis_t, f"{lock_name}-rlock")
259 current_cache_wlock = redis_lock.Lock(redis_t, f"{lock_name}-wlock")
260 lock_reader = f"{lock_name}-reader"
261 # make sure only one reader is entering
262 current_cache_rlock.acquire(timeout=60)
263 try:
264 current_cache_readers = redis_t.get(lock_reader)
265 if current_cache_readers is None or int(current_cache_readers) == 0:
266 CacheUtils.acquire(current_cache_wlock, lock_name)
267 redis_t.incr(lock_reader)
268 finally:
269 current_cache_rlock.release()
270 try:
271 yield
272 finally:
273 # make sure only one reader is leaving
274 current_cache_rlock.acquire(timeout=60)
275 try:
276 redis_t.decr(lock_reader)
277 if int(redis_t.get(lock_reader)) == 0:
278 redis_t.delete(lock_reader)
279 current_cache_wlock.reset()
280 finally:
281 current_cache_rlock.release()
282
283 @staticmethod
284 @contextlib.contextmanager

Callers 2

_datasetMethod · 0.80
_dataset_uriMethod · 0.80

Calls 3

acquireMethod · 0.80
getMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected