pool.py 842 B

12345678910111213141516171819202122232425262728
  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. self.connector_pool.put(self.method_init(**self.kwargs))
  18. _conn = self.connector_pool.get(block=True)
  19. return _conn
  20. def putConnector(self,_conn):
  21. with self._lock:
  22. self.connector_pool.put(_conn)