Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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