某软件公司开发人员要创建一个数据库连接池,将指定个数的(如两个或3个)数据库连接对象存储在连接池中,客户端代码可以从池中随机取一个连接对象来连接数据库,试通过对单例类进行改造,设计一个能够自行提供指定个数实
时间: 2023-05-28 18:01:08 浏览: 227
现的连接池的类。
```python
import random
class ConnectionPool:
__instance = None
def __init__(self, num_connections):
if self.__class__.__instance is not None:
raise Exception("Singleton instance already exists")
self.__class__.__instance = self
self.connections = [f"connection{i}" for i in range(num_connections)]
@classmethod
def get_instance(cls, num_connections):
if cls.__instance is None:
cls(num_connections)
return cls.__instance
def get_connection(self):
return random.choice(self.connections)
```
在上面的代码中,我们使用了单例模式,保证了只有一个连接池实例存在。在初始化方法中,我们接受一个参数 `num_connections` 代表需要创建的连接数,将这些连接对象存在了一个列表中。在 `get_instance` 类方法中,我们首先检查实例是否已经存在,如果不存在则创建一个实例,否则直接返回现有实例。在 `get_connection` 方法中,我们随机返回一个连接对象。这个类可以像下面这样使用:
```python
# 创建一个含有两个连接的连接池
pool = ConnectionPool.get_instance(2)
# 随机获取一个连接对象
print(pool.get_connection())
# 再次获取连接对象
print(pool.get_connection())
# 再次获取连接对象,这次应该跑出 IndexError 异常
print(pool.get_connection())
```
阅读全文
相关推荐
















