The implementation using `Queue` should address above problems:

  - Fixed: It doesn't limit the number of connections
  - Fixed: It has a first-in-last-out behavior.

> It's not clear how it would interact with Twisted's cooperative-multitasking.

I have tested using the following code. It works as expected. `BlockingDBConnectionPool` also works well with `deferToThread`.

```python
import time
from warp.common.store import DBConnectionPool, BlockingDBConnectionPool
from twisted.internet.task import coiterate
@async
def render_test(request):
    with DBConnectionPool.getConnection() as store:
        def test():
            for i in xrange(1, 10):
                time.sleep(0.1)
                print str(i) * 10
                yield None
        yield coiterate(test())
    defer.returnValue('test')
```

> It cannot be used to create 2 pools (singleton lock, stores).

Multiple pools will be implemented when we need it.