# Class PingingPool (3.68.0)

3.68.0 (latest) 3.67.0 3.66.0 3.65.0 3.64.0 3.63.0 3.62.0 3.61.0 3.60.0 3.59.0 3.58.0 3.57.0 3.56.0 3.55.0 3.54.0 3.53.0 3.52.0 3.51.0 3.50.1 3.46.0 3.45.0 3.44.0 3.43.0 3.42.0 3.41.0 3.40.1 3.39.0 3.38.0 3.37.0 3.36.0 3.35.1 3.34.0 3.33.0 3.32.0 3.31.0 3.30.0 3.29.0 3.28.0 3.27.1 3.26.0 3.25.0 3.24.0 3.23.0 3.22.2 3.21.0 3.20.0 3.19.0 3.18.0 3.17.0 3.16.0 3.15.1 3.14.1 3.13.0 3.12.1 3.11.1 3.10.0 3.9.0 3.8.0 3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.0 3.1.0 3.0.0 2.1.1 2.0.0 1.19.3 1.18.0 1.17.1 1.16.0 1.15.1 1.14.0 1.13.0 1.12.0 1.11.0 1.10.0

    PingingPool(
        size=10, default_timeout=10, ping_interval=3000, labels=None, database_role=None
    )

Concrete session pool implementation:

- Pre-allocates / creates a fixed number of sessions.

- Sessions are used in "round-robin" order (LRU first).

- "Pings" existing sessions in the background after a specified interval
  via an API call (`session.ping()`).

- Blocks, with a timeout, when `get` is called on an empty pool.
  Raises after timing out.

- Raises when `put` is called on a full pool. That error is
  never expected in normal practice, as users should be calling
  `get` followed by `put` whenever in need of a session.

The application is responsible for calling `ping` at appropriate
times, e.g. from a background thread.

| ## Parameters ||
|---|---|
| **Name** | **Description** |
| `size` | `int` fixed pool size |
| `default_timeout` | `int` default timeout, in seconds, to wait for a returned session. |
| `ping_interval` | `int` interval at which to ping sessions. |
| `labels` | `dict (str -> str) or None` (Optional) user-assigned labels for sessions created by the pool. |
| `database_role` | `str` (Optional) user-assigned database_role for the session. |

## Methods

### bind

    bind(database)

Associate the pool with a database.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `database` | `https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.database.Database` database used by the pool to create sessions when needed. |

### clear

    clear()

Delete all sessions in the pool.

### get

    get(timeout=None)

Check a session out from the pool.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `timeout` | `int` seconds to block waiting for an available session |

| **Exceptions** ||
|---|---|
| **Type** | **Description** |
| `` `queue.Empty `` | if the queue is empty. |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.session.Session` | an existing session from the pool, or a newly-created session. |

### ping

    ping()

Refresh maybe-expired sessions in the pool.

This method is designed to be called from a background thread,
or during the "idle" phase of an event loop.

### put

    put(session)

Return a session to the pool.

Never blocks: if the pool is full, raises.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `session` | `https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.session.Session` the session being returned. |

| **Exceptions** ||
|---|---|
| **Type** | **Description** |
| `` `queue.Full `` | if the queue is full. |