Class PingingPool (3.51.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 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
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 Session

the session being returned.

Exceptions
Type Description
`queue.Full if the queue is full.