资源管理模式
RAII模式
python
class Connection:
def __init__(self, host):
self.host = host
self.connect()
def connect(self):
print(f"Connecting to {self.host}")
def close(self):
print("Closing connection")
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
with Connection("localhost") as conn:
pass # 自动关闭资源池
python
from queue import Queue
class ConnectionPool:
def __init__(self, size):
self.pool = Queue(size)
for _ in range(size):
self.pool.put(self.create_connection())
def acquire(self):
return self.pool.get()
def release(self, conn):
self.pool.put(conn)
@contextmanager
def connection(self):
conn = self.acquire()
try:
yield conn
finally:
self.release(conn)练习
- 实现文件锁上下文管理器
- 创建资源池
- 异常安全的资源清理
答案:第五章答案
本章完成,继续第六章