pool.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from multiprocessing import RLock
  2. import queue
  3. class ConnectorPool():
  4. def __init__(self,init_num,max_num,method_init,**kwargs):
  5. self.connector_pool = queue.Queue()
  6. for i in range(init_num):
  7. self.connector_pool.put(method_init(**kwargs))
  8. self.method_init = method_init
  9. self.kwargs = kwargs
  10. self._lock = RLock()
  11. self.pool_size = init_num
  12. self.max_num = max_num
  13. def getConnector(self):
  14. with self._lock:
  15. if self.connector_pool.empty():
  16. if self.pool_size<self.max_num:
  17. while 1:
  18. try:
  19. _conn = self.method_init(**self.kwargs)
  20. self.connector_pool.put(_conn)
  21. break
  22. except Exception as e:
  23. pass
  24. _conn = self.connector_pool.get(block=True)
  25. return _conn
  26. def putConnector(self,_conn):
  27. self.connector_pool.put(_conn)
  28. def destory(self):
  29. while 1:
  30. try:
  31. conn = self.connector_pool.get(False)
  32. conn.close()
  33. except Exception as e:
  34. break
  35. def __del__(self):
  36. self.destory()
  37. if __name__ == '__main__':
  38. print(1)