Skip to content

Commit 8a04c7c

Browse files
committed
implement Object Pool Pattern
1 parent d3b9835 commit 8a04c7c

File tree

3 files changed

+196
-8
lines changed

3 files changed

+196
-8
lines changed

ObjectPool/.ipynb_checkpoints/ObjectPool-checkpoint.ipynb

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,84 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"### Object Pool - \n",
7+
"### Object Pool - Tem o objetivo de reduzir o tempo e custo das instanciações, reaproveitando objetos.\n",
88
"\n",
99
"### Mais Informações:\n",
10-
"- "
10+
"- https://sourcemaking.com/design_patterns/object_pool\n",
11+
"- http://www.csi.uneb.br/padroes_de_projetos/object_pool.html"
1112
]
1213
},
1314
{
1415
"cell_type": "code",
15-
"execution_count": null,
16+
"execution_count": 1,
1617
"metadata": {},
1718
"outputs": [],
18-
"source": []
19+
"source": [
20+
"class DB:\n",
21+
" def __init__(self, id=None):\n",
22+
" self.id = id\n",
23+
" \n",
24+
" def __repr__(self):\n",
25+
" return 'DB Id: {} | Memory Address: {}'.format(self.id, hex(id(self)))"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": 2,
31+
"metadata": {},
32+
"outputs": [],
33+
"source": [
34+
"class DBPool:\n",
35+
" def __init__(self, size):\n",
36+
" self._dbs = [DB(_) for _ in range(size)]\n",
37+
"\n",
38+
" def acquire(self):\n",
39+
" return self._dbs.pop()\n",
40+
"\n",
41+
" def release(self, db):\n",
42+
" self._dbs.append(db)\n",
43+
" \n",
44+
" def getPoolSize(self):\n",
45+
" return len(self._dbs)"
46+
]
47+
},
48+
{
49+
"cell_type": "code",
50+
"execution_count": 3,
51+
"metadata": {},
52+
"outputs": [
53+
{
54+
"name": "stdout",
55+
"output_type": "stream",
56+
"text": [
57+
">> Create Pool..\n",
58+
"Pool size: 10\n",
59+
">> Acquire 2 dbs..\n",
60+
"DB Id: 9 | Memory Address: 0x7f5dcefc0c88\n",
61+
"DB Id: 8 | Memory Address: 0x7f5dcefc0c50\n",
62+
"Pool size: 8\n",
63+
">> Release 2 dbs..\n",
64+
"Pool size: 10\n"
65+
]
66+
}
67+
],
68+
"source": [
69+
"print('>> Create Pool..')\n",
70+
"dbpool = DBPool(10)\n",
71+
"print('Pool size: ' + str(dbpool.getPoolSize()))\n",
72+
"\n",
73+
"print('>> Acquire 2 dbs..')\n",
74+
"db1 = dbpool.acquire()\n",
75+
"db2 = dbpool.acquire()\n",
76+
"print(db1)\n",
77+
"print(db2)\n",
78+
"print('Pool size: ' + str(dbpool.getPoolSize()))\n",
79+
"\n",
80+
"print('>> Release 2 dbs..')\n",
81+
"dbpool.release(db1)\n",
82+
"dbpool.release(db2)\n",
83+
"print('Pool size: ' + str(dbpool.getPoolSize()))"
84+
]
1985
}
2086
],
2187
"metadata": {

ObjectPool/ObjectPool.ipynb

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,84 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"### Object Pool - \n",
7+
"### Object Pool - Tem o objetivo de reduzir o tempo e custo das instanciações, reaproveitando objetos.\n",
88
"\n",
99
"### Mais Informações:\n",
10-
"- "
10+
"- https://sourcemaking.com/design_patterns/object_pool\n",
11+
"- http://www.csi.uneb.br/padroes_de_projetos/object_pool.html"
1112
]
1213
},
1314
{
1415
"cell_type": "code",
15-
"execution_count": null,
16+
"execution_count": 1,
1617
"metadata": {},
1718
"outputs": [],
18-
"source": []
19+
"source": [
20+
"class DB:\n",
21+
" def __init__(self, id=None):\n",
22+
" self.id = id\n",
23+
" \n",
24+
" def __repr__(self):\n",
25+
" return 'DB Id: {} | Memory Address: {}'.format(self.id, hex(id(self)))"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": 2,
31+
"metadata": {},
32+
"outputs": [],
33+
"source": [
34+
"class DBPool:\n",
35+
" def __init__(self, size):\n",
36+
" self._dbs = [DB(_) for _ in range(size)]\n",
37+
"\n",
38+
" def acquire(self):\n",
39+
" return self._dbs.pop()\n",
40+
"\n",
41+
" def release(self, db):\n",
42+
" self._dbs.append(db)\n",
43+
" \n",
44+
" def getPoolSize(self):\n",
45+
" return len(self._dbs)"
46+
]
47+
},
48+
{
49+
"cell_type": "code",
50+
"execution_count": 3,
51+
"metadata": {},
52+
"outputs": [
53+
{
54+
"name": "stdout",
55+
"output_type": "stream",
56+
"text": [
57+
">> Create Pool..\n",
58+
"Pool size: 10\n",
59+
">> Acquire 2 dbs..\n",
60+
"DB Id: 9 | Memory Address: 0x7f5dcefc0c88\n",
61+
"DB Id: 8 | Memory Address: 0x7f5dcefc0c50\n",
62+
"Pool size: 8\n",
63+
">> Release 2 dbs..\n",
64+
"Pool size: 10\n"
65+
]
66+
}
67+
],
68+
"source": [
69+
"print('>> Create Pool..')\n",
70+
"dbpool = DBPool(10)\n",
71+
"print('Pool size: ' + str(dbpool.getPoolSize()))\n",
72+
"\n",
73+
"print('>> Acquire 2 dbs..')\n",
74+
"db1 = dbpool.acquire()\n",
75+
"db2 = dbpool.acquire()\n",
76+
"print(db1)\n",
77+
"print(db2)\n",
78+
"print('Pool size: ' + str(dbpool.getPoolSize()))\n",
79+
"\n",
80+
"print('>> Release 2 dbs..')\n",
81+
"dbpool.release(db1)\n",
82+
"dbpool.release(db2)\n",
83+
"print('Pool size: ' + str(dbpool.getPoolSize()))"
84+
]
1985
}
2086
],
2187
"metadata": {

ObjectPool/ObjectPool.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
# ### Object Pool - Tem o objetivo de reduzir o tempo e custo das instanciações, reaproveitando objetos.
5+
#
6+
# ### Mais Informações:
7+
# - https://sourcemaking.com/design_patterns/object_pool
8+
# - http://www.csi.uneb.br/padroes_de_projetos/object_pool.html
9+
10+
# In[1]:
11+
12+
13+
class DB:
14+
def __init__(self, id=None):
15+
self.id = id
16+
17+
def __repr__(self):
18+
return 'DB Id: {} | Memory Address: {}'.format(self.id, hex(id(self)))
19+
20+
21+
# In[2]:
22+
23+
24+
class DBPool:
25+
def __init__(self, size):
26+
self._dbs = [DB(_) for _ in range(size)]
27+
28+
def acquire(self):
29+
return self._dbs.pop()
30+
31+
def release(self, db):
32+
self._dbs.append(db)
33+
34+
def getPoolSize(self):
35+
return len(self._dbs)
36+
37+
38+
# In[3]:
39+
40+
41+
print('>> Create Pool..')
42+
dbpool = DBPool(10)
43+
print('Pool size: ' + str(dbpool.getPoolSize()))
44+
45+
print('>> Acquire 2 dbs..')
46+
db1 = dbpool.acquire()
47+
db2 = dbpool.acquire()
48+
print(db1)
49+
print(db2)
50+
print('Pool size: ' + str(dbpool.getPoolSize()))
51+
52+
print('>> Release 2 dbs..')
53+
dbpool.release(db1)
54+
dbpool.release(db2)
55+
print('Pool size: ' + str(dbpool.getPoolSize()))
56+

0 commit comments

Comments
 (0)