# Module pool (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 Pools managing shared Session objects.

## Classes

### [AbstractSessionPool](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.AbstractSessionPool)

    AbstractSessionPool(labels=None, database_role=None)

Specifies required API for concrete session pool implementations.

| **Parameters** ||
|---|---|
| **Name** | **Description** |
| `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. |

### [BurstyPool](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.BurstyPool)

    BurstyPool(target_size=10, labels=None, database_role=None)

Concrete session pool implementation:

- "Pings" existing sessions via `session.exists` before returning
  them.

- Creates a new session, rather than blocking, when `get` is called
  on an empty pool.

- Discards the returned session, rather than blocking, when `put`
  is called on a full pool.

| **Parameters** ||
|---|---|
| **Name** | **Description** |
| `target_size` | `int` max pool size |
| `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. |

### [FixedSizePool](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.FixedSizePool)

    FixedSizePool(
        size=10, default_timeout=10, labels=None, database_role=None, max_age_minutes=55
    )

Concrete session pool implementation:

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

- "Pings" existing sessions via `session.exists` before returning
  sessions that have not been used for more than 55 minutes and replaces
  expired sessions.

- 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.

| **Parameters** ||
|---|---|
| **Name** | **Description** |
| `size` | `int` fixed pool size |
| `default_timeout` | `int` default timeout, in seconds, to wait for a returned session. |
| `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. |

### [PingingPool](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.PingingPool)

    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. |

### [SessionCheckout](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.SessionCheckout)

    SessionCheckout(pool, **kwargs)

Context manager: hold session checked out from a pool.

Deprecated. Sessions should be checked out indirectly using context
managers or xref_run_in_transaction,
rather than checked out directly from the pool.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `pool` | `concrete subclass of https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.AbstractSessionPool` Pool from which to check out a session. |

### [TransactionPingingPool](https://docs.cloud.google.com/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.TransactionPingingPool)

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

Concrete session pool implementation:

Deprecated: TransactionPingingPool no longer begins a transaction for each of its sessions at startup.
Hence the TransactionPingingPool is same as `PingingPool` and maybe removed in the future.

In addition to the features of `PingingPool`, this class
creates and begins a transaction for each of its sessions at startup.

When a session is returned to the pool, if its transaction has been
committed or rolled back, the pool creates a new transaction for the
session and pushes the transaction onto a separate queue of "transactions
to begin." The application is responsible for flushing this queue
as appropriate via the pool's `begin_pending_transactions` method.

| **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. |