DBInteractionPool

While the DBConnectionPool resembles a simple, “classic” connection pool, the DBInteractionPool is sort of a meta or management pool of one or more DBConnectionPool instances.

The idea behind this structure is to support master slave replicated database cluster backends that manage write and read-only (without side-effects) operations on different machines/clusters.

DBInteractionPool provides two main methods for interaction:

  • DBInteractionPool.run() to run queries (interactions) on the pool
  • DBInteractionPool.listen() to subscribe to asyncronous event channels from the database

Object Documenation

class gDBPool.gDBPool.DBInteractionPool(dsn, pool_size=10, pool_name='default', do_log=False)[source]

Bases: object

The DBInteractionPool manages DBConnectionPool instances and can run queries or functions (ie. several queries wrapped in a function) on one of these pools.

Parameters:
  • dsn (string) – DSN for the default class:DBConnectionPool
  • pool_size (int) – Poolsize of the first/default class:DBConnectionPool
  • pool_name (string) – Keyname for the first/default class:DBConnectionPool
  • do_log (bool) – Log to the console or not
add_pool(dsn=None, pool_name=None, pool_size=10, default_write_pool=False, default_read_pool=False, default_pool=False, db_module='psycopg2')[source]

Add a named :class:DBConnectionPool

Parameters:
  • dsn (string) – dsn
  • pool_name (string) – a name for the pool to identify it inside the DBInteractionPool
  • pool_size (int) – Number of connections the pool should have.
  • default_write_pool (bool) – Should the added pool used as the default pool for write operations?
  • default_read_pool (bool) – Should the added pool used as the default pool for read operations?
  • default_pool (bool) – Should the added pool used as the default pool? (must be a write pool)
  • db_module (string) – name of the DB-API module to use

Note

db_module right now ONLY supports psycopg2 and the option most likely will be removed in the future

run(interaction=None, interaction_args=None, get_result=True, is_write=True, pool=None, conn=None, cursor=None, partial_txn=False, dry_run=False, *args, **kwargs)[source]

Run an interaction on one of the managed :class:DBConnectionPool pools.

Parameters:
  • interaction (function|method) – The interaction to run. Either a SQL string or a function that takes at least a parameter conn.
  • interaction_args (string) – None,
  • get_result (bool) – call and return cursor.fetchall() when True - otherwise just return True as result if no exception was raised.
  • is_write (bool) – If the interaction has no side-effects set to False. Without naming a pool the default_read pool would be used.
  • pool (string) – Keyname of the pool to get the a connection from
  • conn (connection) – Pass in a Connection instead of getting one from the pool. (ie. for locks in transactions that span several interactions. Use partial_txn = True to retrieve the Connection and then pass it into the next interaction run.)
  • cursor (cursor) – Pass in a Cursor instead of getting one from the Connection (ie. for locks in transactions that span several interactions. Use partial_txn = True to retrieve the Cursor and then pass it into the next interaction run.)
  • partial_txn (bool) – Return connection and cursor after executing the interaction (ie. for locks in transactions that span several interactions)
  • dry_run (bool) – Run the query with mogrify instead of execute and output the query that would have run. (Only applies to query interactions)
  • args (list) – args
  • kwargs (dict) – kwargs
Returns:

– a gevent.AsyncResult that will hold the result of the interaction once it finished. When partial_txn = True it will return a dict that will hold the result, the connection, and the cursor that ran the transaction. (use for locking with SELECT FOR UPDATE)

listen_on(result_queue=None, channel_name=None, pool=None, cancel_event=None)[source]

Listen for asynchronous events on a named Channel and pass them to the result_queue

Parameters:
  • result_queue (gevent.Queue) – The gevent.Queue to pass event payloads to
  • channel_name (string) – Name of the channel to LISTEN on
  • pool (string) – Name of the pool to get the connection from
  • cancel_event (gevent.Event) – A gevent.Event which will break the listening loop when set

Table Of Contents

Previous topic

DBConnectionPool

Next topic

PGChannelListener

This Page