96SEO 2026-08-09 08:48 1
按理说,
在实际项目中,Usage 这种统计类经常需要累计多个子任务的结果。面对「原地修改」和「返回新对象」两种实现方式,大家往往会纠结:

add —— 原地修改
@dataclass
class Usage:
prompt的观点是,int = 0
completion: int = 0
再看total,int = 0
cached这方面,int = 0
再看calls,int = 0
至于cost。float = 0.0
def add -> None:
self.prompt += or.prompt
self.completion += or.completion
self.total += or.total
self.cached += or.cached
self.calls += or.calls
self.cost += or.cost
使用方式:
total = Usage
total.add
total.add
Usage 实例,适合在「大量累加」的场景下使用。其实,
usage = Usage
for item in usages:
usage.add # 只维护一个对象。避免频繁 GC
原地修改会导致引用共享,引发意想不到的副作用。
a = Usage
b = a.add) # b 为 None。a 已被修改
print # 15
print # None
如果你误以为 b = a.add 会得到一个新副本,实际却是对同一个对象的引用,这在调试时极易埋下隐藏 bug。按理说,
__add__ —— 返回新对象
@dataclass
class Usage:
至于prompt,int = 0
completion: int = 0
total的观点是,int = 0
cached这方面,int = 0
再看calls,int = 0
说到cost,float = 0.0
def __add__ -> "Usage":
return Usage(
prompt=self.prompt + or.prompt,completion=self.completion + or.completion。total=self.total + or.total,cached=self.cached + or.cached,calls=self.calls + or.calls,cost=self.cost + or.cost,)
total = usage1 + usage2 # 返回全新的 Usage 实例
total = u1 + u2 + u3 + u4 # 链式计算,一样使用较稳定
total = usage1 + usage2
print # 未被修改,仍是原始值
每一次 + 都会产生一个新实例。在大批量循环中可能导致大量临时对象:
result = Usage
for u in usages:
result = result + u # 每次循环都会生成一个新对象
如果 usages 数量极大且性能敏感这部分开销不可忽视。
很多开发者误以为赋值会复制对象本身。其实 Python 默认复制的是引用:
usage = Usage
backup = usage # backup 与 usage 指向同一实例
usage.add)
print # 输出 15,备份也被改了!
This is root cause of many “莫名其妙的数据变化” bugs.
def calculate_total:
u.add)
return u
u = Usage
result = calculate_total
print # 被改成了 10 —— 函数内部改变了外部对象!
If you expect
A typical scenario:
The fix is eir:
The existing codebase uses .add,but thanks to its architecture re is no concurrent write on same instance:
calculate_total to be pure,using .add
3️⃣ 多线程/并发环境下的数据竞争
UserUsage.
# Thread A # Thread B # Result?tmp_a = global_usage.prompt tmp_b = global_usage.prompt
tmp_a += response_a.prompt tmp_b += response_b.prompt
global_usage.prompt = tmp_a global_usage.prompt = tmp_b
# 最终只保留后写入的值,前一次更新丢失。
from threading import Lock
lock = Lock
def safe_add:
with lock:
target.add
实战选择 & 推荐做法
Usage,prefer **immutable addition** or protect mutations with a lock.
当前项目中的具体实现
在当前场景下这方面,
如果以后需求演变为「所有线程直接写同一个全局 Usage」,请务必切换到锁保护或改用不可变的 'add'.
* 对于并发写入,请采用锁或 immutable addition。
记住 “性能 VS 安全”不是非此即彼,而是要结合业务实际选择最合适的实现方式。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback