开发的一些知识

1.单例和工厂函数

区别

维度 单例 工厂(无缓存)
内存 一份实例 + 一份连接池 每实例独立内存 + 独立连接池
连接池 共享,TCP 复用 各建各的,易打满文件描述符
CPU 初始化一次 每次都要构造 + 可能的 TLS 握手
GC 压力 实例用完才回收,高峰时频繁 GC

单例的代码

复制代码
from functools import lru_cache

# 最多缓存 128 组不同参数的结果,可以存128次不同的调用
@lru_cache(maxsize=128)          # 最多缓存 128 组不同参数的结果
def expensive(x, y):
    print(f"real compute {x},{y}")
    return x + y

工厂函数的代码

  • 和普通函数一样写法

2.with用法

  • 最常见的场景就是"资源管理",比如文件,锁,redis等操作
  • 每次进入 with 都重新定义一次函数
场景 用 with 的效果
文件 with open(...) as f: 自动关
with lock: 自动解
数据库/Redis with RedisStore(...) as s: 自动 close
临时修改全局状态 with temp_set_env(): 自动恢复
计时/日志 with timer: 一定记录

3.关于类的单例

  • 只有当你把"实例"挂在模块顶层 ,并且永远只 import 这个实例、不再手动 类() 新建时,它才是"事实单例"。
  • 类本身不会因为你"先调用一次"就变成单例;一旦有人再写 类(),仍然会得到全新对象。
相关推荐
青山木几秒前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
柒星栈11 分钟前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之18 分钟前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
程序员-珍18 分钟前
报错下载android sdk失败
android·java
糖果店的幽灵23 分钟前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
吃饱了得干活41 分钟前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
这是个栗子41 分钟前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
蓝创工坊Blue Foundry1 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
会飞的小新1 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
唐青枫1 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java