Advertisement
Guest User

Object Pool

a guest
Nov 12th, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.13 KB | None | 0 0
  1. # Author: Filip Sawicki
  2.  
  3.  
  4. # from sqlalchemy import create_engine
  5.  
  6. USER = 'FILIP'
  7. PASS = 'ADMIN'
  8. SERVER = 'localhost'
  9.  
  10.  
  11. class Singleton():
  12.     def __new__(cls, *args, **kwds):
  13.         self = "__self__"
  14.         if not hasattr(cls, self):
  15.             instance = object.__new__(cls)
  16.             instance.init(*args, **kwds)
  17.             setattr(cls, self, instance)
  18.         else:
  19.             raise Exception("This is a singleton class.")
  20.         return getattr(cls, self)
  21.  
  22.     def init(self, *args, **kwds):
  23.         pass
  24.  
  25.  
  26. class DataBase():
  27.     def __init__(self):
  28.         self.connection = None
  29.         self.engine = None
  30.         self.open = False
  31.  
  32.     def __del__(self):
  33.         if self.open:
  34.             # self.disconnect()
  35.             self.open = False
  36.         del self
  37.  
  38.     def connect(self, driver):
  39.         self.engine = create_engine(driver)
  40.         # self.connection = self.engine.connect()
  41.         self.open = True
  42.  
  43.     def disconnect(self):
  44.         # self.connection.close()
  45.         self.open = False
  46.  
  47.     def execute(self, request):
  48.         print('Executing -> {}'.format(request))
  49.         # return self.connection.execute(request)
  50.  
  51.  
  52. class DataBasePool(Singleton):
  53.     def __init__(self, size):
  54.         self.max_pool_size = size
  55.         self.db_pool = [DataBase() for _ in range(0, self.max_pool_size)]
  56.  
  57.     def acquire(self):
  58.         return self.db_pool.pop()
  59.  
  60.     def release(self, db):
  61.         if len(self.db_pool) < self.max_pool_size:
  62.             self.db_pool.append(db)
  63.         else:
  64.             print('Limit Reached')
  65.  
  66.     def cleanup(self):
  67.         for index, db in enumerate(self.db_pool):
  68.             del db
  69.             self.db_pool[index] = DataBase()
  70.  
  71.  
  72. def create_engine(driver):
  73.     print('Creating connection...')
  74.     # return sqlalchemy.create_engine(driver)
  75.  
  76.  
  77. def main():
  78.     db_pool = DataBasePool(2)
  79.     # db_pool2 = DataBasePool(3)
  80.  
  81.     db1 = db_pool.acquire()
  82.     db1.connect('mysql://{}:{}@{}/db'.format(USER, PASS, SERVER))
  83.     result = db1.execute('SELECT username FROM user')
  84.  
  85.     db_pool.release(db1)
  86.     db_pool.cleanup()
  87.  
  88.  
  89. if __name__ == "__main__":
  90.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement