/docs/source/pool.rst

https://github.com/aiokitchen/aiomisc · ReStructuredText · 47 lines · 31 code · 16 blank · 0 comment · 0 complexity · 31f1d997101b07a44d13fa044e908a0f MD5 · raw file

  1. Abstract connection pool
  2. ========================
  3. ``aiomisc.PoolBase`` is an abstract class for implementing user-defined
  4. connection pool.
  5. Example for ``aioredis``:
  6. .. code-block:: python
  7. import asyncio
  8. import aioredis
  9. import aiomisc
  10. class RedisPool(aiomisc.PoolBase):
  11. def __init__(self, uri, maxsize=10, recycle=60):
  12. super().__init__(maxsize=maxsize, recycle=recycle)
  13. self.uri = uri
  14. async def _create_instance(self):
  15. return await aioredis.create_redis(self.uri)
  16. async def _destroy_instance(self, instance: aioredis.Redis):
  17. instance.close()
  18. await instance.wait_closed()
  19. async def _check_instance(self, instance: aioredis.Redis):
  20. try:
  21. await asyncio.wait_for(instance.ping(1), timeout=0.5)
  22. except:
  23. return False
  24. return True
  25. async def main():
  26. pool = RedisPool("redis://localhost")
  27. async with pool.acquire() as connection:
  28. await connection.set("foo", "bar")
  29. async with pool.acquire() as connection:
  30. print(await connection.get("foo"))
  31. asyncio.run(main())