Pre-allocates / creates a fixed number of sessions.
"Pings" existing sessions viasession.existsbefore returning
sessions that have not been used for more than 55 minutes and replaces
expired sessions.
Blocks, with a timeout, whengetis called on an empty pool.
Raises after timing out.
Raises whenputis called on a full pool. That error is
never expected in normal practice, as users should be callinggetfollowed byputwhenever 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.
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, whengetis called on an empty pool.
Raises after timing out.
Raises whenputis called on a full pool. That error is
never expected in normal practice, as users should be callinggetfollowed byputwhenever in need of a session.
The application is responsible for callingpingat 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.
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.
Deprecated: TransactionPingingPool no longer begins a transaction for each of its sessions at startup.
Hence the TransactionPingingPool is same asPingingPooland maybe removed in the future.
In addition to the features ofPingingPool, 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'sbegin_pending_transactionsmethod.
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.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[],[],null,["# Module pool (3.57.0)\n\nVersion latestkeyboard_arrow_down\n\n- [3.57.0 (latest)](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool)\n- [3.56.0](/python/docs/reference/spanner/3.56.0/google.cloud.spanner_v1.pool)\n- [3.55.0](/python/docs/reference/spanner/3.55.0/google.cloud.spanner_v1.pool)\n- [3.54.0](/python/docs/reference/spanner/3.54.0/google.cloud.spanner_v1.pool)\n- [3.53.0](/python/docs/reference/spanner/3.53.0/google.cloud.spanner_v1.pool)\n- [3.52.0](/python/docs/reference/spanner/3.52.0/google.cloud.spanner_v1.pool)\n- [3.51.0](/python/docs/reference/spanner/3.51.0/google.cloud.spanner_v1.pool)\n- [3.50.1](/python/docs/reference/spanner/3.50.1/google.cloud.spanner_v1.pool)\n- [3.46.0](/python/docs/reference/spanner/3.46.0/google.cloud.spanner_v1.pool)\n- [3.45.0](/python/docs/reference/spanner/3.45.0/google.cloud.spanner_v1.pool)\n- [3.44.0](/python/docs/reference/spanner/3.44.0/google.cloud.spanner_v1.pool)\n- [3.43.0](/python/docs/reference/spanner/3.43.0/google.cloud.spanner_v1.pool)\n- [3.42.0](/python/docs/reference/spanner/3.42.0/google.cloud.spanner_v1.pool)\n- [3.41.0](/python/docs/reference/spanner/3.41.0/google.cloud.spanner_v1.pool)\n- [3.40.1](/python/docs/reference/spanner/3.40.1/google.cloud.spanner_v1.pool)\n- [3.39.0](/python/docs/reference/spanner/3.39.0/google.cloud.spanner_v1.pool)\n- [3.38.0](/python/docs/reference/spanner/3.38.0/google.cloud.spanner_v1.pool)\n- [3.37.0](/python/docs/reference/spanner/3.37.0/google.cloud.spanner_v1.pool)\n- [3.36.0](/python/docs/reference/spanner/3.36.0/google.cloud.spanner_v1.pool)\n- [3.35.1](/python/docs/reference/spanner/3.35.1/google.cloud.spanner_v1.pool)\n- [3.34.0](/python/docs/reference/spanner/3.34.0/google.cloud.spanner_v1.pool)\n- [3.33.0](/python/docs/reference/spanner/3.33.0/google.cloud.spanner_v1.pool)\n- [3.32.0](/python/docs/reference/spanner/3.32.0/google.cloud.spanner_v1.pool)\n- [3.31.0](/python/docs/reference/spanner/3.31.0/google.cloud.spanner_v1.pool)\n- [3.30.0](/python/docs/reference/spanner/3.30.0/google.cloud.spanner_v1.pool)\n- [3.29.0](/python/docs/reference/spanner/3.29.0/google.cloud.spanner_v1.pool)\n- [3.28.0](/python/docs/reference/spanner/3.28.0/google.cloud.spanner_v1.pool)\n- [3.27.1](/python/docs/reference/spanner/3.27.1/google.cloud.spanner_v1.pool)\n- [3.26.0](/python/docs/reference/spanner/3.26.0/google.cloud.spanner_v1.pool)\n- [3.25.0](/python/docs/reference/spanner/3.25.0/google.cloud.spanner_v1.pool)\n- [3.24.0](/python/docs/reference/spanner/3.24.0/google.cloud.spanner_v1.pool)\n- [3.23.0](/python/docs/reference/spanner/3.23.0/google.cloud.spanner_v1.pool)\n- [3.22.2](/python/docs/reference/spanner/3.22.2/google.cloud.spanner_v1.pool)\n- [3.21.0](/python/docs/reference/spanner/3.21.0/google.cloud.spanner_v1.pool)\n- [3.20.0](/python/docs/reference/spanner/3.20.0/google.cloud.spanner_v1.pool)\n- [3.19.0](/python/docs/reference/spanner/3.19.0/google.cloud.spanner_v1.pool)\n- [3.18.0](/python/docs/reference/spanner/3.18.0/google.cloud.spanner_v1.pool)\n- [3.17.0](/python/docs/reference/spanner/3.17.0/google.cloud.spanner_v1.pool)\n- [3.16.0](/python/docs/reference/spanner/3.16.0/google.cloud.spanner_v1.pool)\n- [3.15.1](/python/docs/reference/spanner/3.15.1/google.cloud.spanner_v1.pool)\n- [3.14.1](/python/docs/reference/spanner/3.14.1/google.cloud.spanner_v1.pool)\n- [3.13.0](/python/docs/reference/spanner/3.13.0/google.cloud.spanner_v1.pool)\n- [3.12.1](/python/docs/reference/spanner/3.12.1/google.cloud.spanner_v1.pool)\n- [3.11.1](/python/docs/reference/spanner/3.11.1/google.cloud.spanner_v1.pool)\n- [3.10.0](/python/docs/reference/spanner/3.10.0/google.cloud.spanner_v1.pool)\n- [3.9.0](/python/docs/reference/spanner/3.9.0/google.cloud.spanner_v1.pool)\n- [3.8.0](/python/docs/reference/spanner/3.8.0/google.cloud.spanner_v1.pool)\n- [3.7.0](/python/docs/reference/spanner/3.7.0/google.cloud.spanner_v1.pool)\n- [3.6.0](/python/docs/reference/spanner/3.6.0/google.cloud.spanner_v1.pool)\n- [3.5.0](/python/docs/reference/spanner/3.5.0/google.cloud.spanner_v1.pool)\n- [3.4.0](/python/docs/reference/spanner/3.4.0/google.cloud.spanner_v1.pool)\n- [3.3.0](/python/docs/reference/spanner/3.3.0/google.cloud.spanner_v1.pool)\n- [3.2.0](/python/docs/reference/spanner/3.2.0/google.cloud.spanner_v1.pool)\n- [3.1.0](/python/docs/reference/spanner/3.1.0/google.cloud.spanner_v1.pool)\n- [3.0.0](/python/docs/reference/spanner/3.0.0/google.cloud.spanner_v1.pool)\n- [2.1.1](/python/docs/reference/spanner/2.1.1/google.cloud.spanner_v1.pool)\n- [2.0.0](/python/docs/reference/spanner/2.0.0/google.cloud.spanner_v1.pool)\n- [1.19.3](/python/docs/reference/spanner/1.19.3/google.cloud.spanner_v1.pool)\n- [1.18.0](/python/docs/reference/spanner/1.18.0/google.cloud.spanner_v1.pool)\n- [1.17.1](/python/docs/reference/spanner/1.17.1/google.cloud.spanner_v1.pool)\n- [1.16.0](/python/docs/reference/spanner/1.16.0/google.cloud.spanner_v1.pool)\n- [1.15.1](/python/docs/reference/spanner/1.15.1/google.cloud.spanner_v1.pool)\n- [1.14.0](/python/docs/reference/spanner/1.14.0/google.cloud.spanner_v1.pool)\n- [1.13.0](/python/docs/reference/spanner/1.13.0/google.cloud.spanner_v1.pool)\n- [1.12.0](/python/docs/reference/spanner/1.12.0/google.cloud.spanner_v1.pool)\n- [1.11.0](/python/docs/reference/spanner/1.11.0/google.cloud.spanner_v1.pool)\n- [1.10.0](/python/docs/reference/spanner/1.10.0/google.cloud.spanner_v1.pool) \nPools managing shared Session objects.\n\nClasses\n-------\n\n### [AbstractSessionPool](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.AbstractSessionPool)\n\n AbstractSessionPool(labels=None, database_role=None)\n\nSpecifies required API for concrete session pool implementations.\n\n### [BurstyPool](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.BurstyPool)\n\n BurstyPool(target_size=10, labels=None, database_role=None)\n\nConcrete session pool implementation:\n\n- \"Pings\" existing sessions via `session.exists` before returning\n them.\n\n- Creates a new session, rather than blocking, when `get` is called\n on an empty pool.\n\n- Discards the returned session, rather than blocking, when `put`\n is called on a full pool.\n\n### [FixedSizePool](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.FixedSizePool)\n\n FixedSizePool(\n size=10, default_timeout=10, labels=None, database_role=None, max_age_minutes=55\n )\n\nConcrete session pool implementation:\n\n- Pre-allocates / creates a fixed number of sessions.\n\n- \"Pings\" existing sessions via `session.exists` before returning\n sessions that have not been used for more than 55 minutes and replaces\n expired sessions.\n\n- Blocks, with a timeout, when `get` is called on an empty pool.\n Raises after timing out.\n\n- Raises when `put` is called on a full pool. That error is\n never expected in normal practice, as users should be calling\n `get` followed by `put` whenever in need of a session.\n\n### [PingingPool](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.PingingPool)\n\n PingingPool(\n size=10, default_timeout=10, ping_interval=3000, labels=None, database_role=None\n )\n\nConcrete session pool implementation:\n\n- Pre-allocates / creates a fixed number of sessions.\n\n- Sessions are used in \"round-robin\" order (LRU first).\n\n- \"Pings\" existing sessions in the background after a specified interval\n via an API call (`session.ping()`).\n\n- Blocks, with a timeout, when `get` is called on an empty pool.\n Raises after timing out.\n\n- Raises when `put` is called on a full pool. That error is\n never expected in normal practice, as users should be calling\n `get` followed by `put` whenever in need of a session.\n\nThe application is responsible for calling `ping` at appropriate\ntimes, e.g. from a background thread.\n\n### [SessionCheckout](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.SessionCheckout)\n\n SessionCheckout(pool, **kwargs)\n\nContext manager: hold session checked out from a pool.\n\nDeprecated. Sessions should be checked out indirectly using context\nmanagers or xref_run_in_transaction,\nrather than checked out directly from the pool.\n\n### [TransactionPingingPool](/python/docs/reference/spanner/latest/google.cloud.spanner_v1.pool.TransactionPingingPool)\n\n TransactionPingingPool(\n size=10, default_timeout=10, ping_interval=3000, labels=None, database_role=None\n )\n\nConcrete session pool implementation:\n\nDeprecated: TransactionPingingPool no longer begins a transaction for each of its sessions at startup.\nHence the TransactionPingingPool is same as `PingingPool` and maybe removed in the future.\n\nIn addition to the features of `PingingPool`, this class\ncreates and begins a transaction for each of its sessions at startup.\n\nWhen a session is returned to the pool, if its transaction has been\ncommitted or rolled back, the pool creates a new transaction for the\nsession and pushes the transaction onto a separate queue of \"transactions\nto begin.\" The application is responsible for flushing this queue\nas appropriate via the pool's `begin_pending_transactions` method."]]