def refresh_part_data_with_lock(self, refresh_data): with DistributedLock(name=f'{self.key}.refresh'): data = self.get_data() if data is not None: data.update(refresh_data) self.set_data(data) return data
def get_node_all_asset_ids_mapping_from_cache_or_generate_to_cache(cls, org_id): mapping = cls.get_node_all_asset_ids_mapping_from_cache(org_id) if mapping: return mapping lock_key = f'KEY_LOCK_GENERATE_ORG_{org_id}_NODE_ALL_ASSET_ids_MAPPING' with DistributedLock(lock_key): # 这里使用无限期锁,原因是如果这里卡住了,就卡在数据库了,说明 # 数据库繁忙,所以不应该再有线程执行这个操作,使数据库忙上加忙 _mapping = cls.get_node_all_asset_ids_mapping_from_cache(org_id) if _mapping: return _mapping _mapping = cls.generate_node_all_asset_ids_mapping(org_id) cls.set_node_all_asset_ids_mapping_to_cache(org_id=org_id, mapping=_mapping) return _mapping