Skip to content

资源管理模式 ​

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)

练习 ​

  1. 实现文件锁上下文管理器
  2. 创建资源池
  3. 异常安全的资源清理

答案:第五章答案

本章完成,继续第六章

用心记录每一步成长