@Cache注释

CacheConcurrencyStrategy.NONE,不适用,默认
CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常(对于不发生改变的数据使用);
CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询(基于时间戳判定机制,,对于数据同步要求严格的情况,使用频繁);
CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁(更新不频繁几个小时或更长);
CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。

### 关于 Python 中 `@` 符号的用法 在 Python 中,`@` 是一种语法糖,用于简化函数或类的调用方式。它主要被用来定义 **装饰器** (Decorator),这是一种高阶函数模式,可以动态修改其他函数的行为。 #### 装饰器的基础概念 装饰器本质上是一个接受函数作为参数并返回新函数的对象。通过使用 `@decorator_name` 的形式,可以在不改变原函数代码的情况下为其添加额外的功能[^2]。 以下是装饰器的一个简单例子: ```python import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): print("Something is happening before the function is called.") result = func(*args, **kwargs) print("Something is happening after the function is called.") return result return wrapper @my_decorator def say_hello(): print("Hello!") say_hello() ``` 在这个例子中,`@my_decorator` 将 `say_hello()` 函数传递给 `my_decorator` 并替换了原始函数。运行此代码会输出以下内容: ``` Something is happening before the function is called. Hello! Something is happening after the function is called. ``` #### 缓存机制中的应用 除了基本功能外,装饰器还常用于优化性能。例如,在引用[2]中提到的 `@functools.lru_cache` 可以缓存昂贵计算的结果,从而减少重复运算的时间开销。 下面展示了一个利用 `lru_cache` 提升效率的例子: ```python from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(30)) # 计算速度快得多 ``` 在此案例中,由于 Fibonacci 数列存在大量重叠子问题,因此启用缓存能够显著提高程序执行速度。 #### 结合机器学习模型训练 回到引用[1]的内容,虽然其中并未直接涉及装饰器的应用场景,但在实际开发过程中,我们也可以借助装饰器来增强诸如日志记录、错误处理等功能。比如为 XGBoost 模型训练过程增加时间测量逻辑: ```python import time from xgboost import XGBClassifier def timer_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"Function {func.__name__} took {end_time - start_time:.4f}s to execute.") return result return wrapper @timer_decorator def train_model(x_train, y_train): model = XGBClassifier( learning_rate=0.1, n_estimators=20, max_depth=4, objective='binary:logistic', seed=27, silent=0 ) model.fit(x_train, y_train, verbose=True) return model train_model(x_train, y_train) ``` 上述实现展示了如何通过自定义装饰器监控模型训练耗时情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值