BufferPool#

class BufferPool(**properties: Any)#

Superclasses: Object, InitiallyUnowned, Object

A BufferPool is an object that can be used to pre-allocate and recycle buffers of the same size and with the same properties.

A BufferPool is created with new().

Once a pool is created, it needs to be configured. A call to get_config() returns the current configuration structure from the pool. With config_set_params() and config_set_allocator() the bufferpool parameters and allocator can be configured. Other properties can be configured in the pool depending on the pool implementation.

A bufferpool can have extra options that can be enabled with config_add_option(). The available options can be retrieved with get_options(). Some options allow for additional configuration properties to be set.

After the configuration structure has been configured, set_config() updates the configuration in the pool. This can fail when the configuration structure is not accepted.

After the pool has been configured, it can be activated with set_active(). This will preallocate the configured resources in the pool.

When the pool is active, acquire_buffer() can be used to retrieve a buffer from the pool.

Buffers allocated from a bufferpool will automatically be returned to the pool with release_buffer() when their refcount drops to 0.

The bufferpool can be deactivated again with set_active(). All further acquire_buffer() calls will return an error. When all buffers are returned to the pool they will be freed.

Constructors#

class BufferPool
classmethod new() BufferPool#

Creates a new BufferPool instance.

Methods#

class BufferPool
acquire_buffer(params: BufferPoolAcquireParams | None = None) Tuple[FlowReturn, Buffer | None]#

Acquires a buffer from pool. buffer should point to a memory location that can hold a pointer to the new buffer. When the pool is empty, this function will by default block until a buffer is released into the pool again or when the pool is set to flushing or deactivated.

params can contain optional parameters to influence the allocation.

Parameters:

params – parameters.

classmethod config_add_option(option: str) None#

Enables the option in config. This will instruct the bufferpool to enable the specified option on the buffers that it allocates.

The options supported by pool can be retrieved with get_options().

Parameters:

option – an option to add

classmethod config_get_allocator() Tuple[bool, Allocator | None, AllocationParams]#

Gets the allocator and params from config.

classmethod config_get_option(index: int) str | None#

Parses an available config and gets the option at index of the options API array.

Parameters:

index – position in the option array to read

classmethod config_get_params() Tuple[bool, Caps | None, int, int, int]#

Gets the configuration values from config.

classmethod config_has_option(option: str) bool#

Checks if config contains option.

Parameters:

option – an option

classmethod config_n_options() int#

Retrieves the number of values currently stored in the options array of the config structure.

classmethod config_set_allocator(allocator: Allocator | None = None, params: AllocationParams | None = None) None#

Sets the allocator and params on config.

One of allocator and params can be None, but not both. When allocator is None, the default allocator of the pool will use the values in param to perform its allocation. When param is None, the pool will use the provided allocator with its default AllocationParams.

A call to set_config() can update the allocator and params with the values that it is able to do. Some pools are, for example, not able to operate with different allocators or cannot allocate with the values specified in params. Use get_config() to get the currently used values.

Parameters:
classmethod config_set_params(caps: Caps | None, size: int, min_buffers: int, max_buffers: int) None#

Configures config with the given parameters.

Parameters:
  • caps – caps for the buffers

  • size – the size of each buffer, not including prefix and padding

  • min_buffers – the minimum amount of buffers to allocate.

  • max_buffers – the maximum amount of buffers to allocate or 0 for unlimited.

classmethod config_validate_params(caps: Caps | None, size: int, min_buffers: int, max_buffers: int) bool#

Validates that changes made to config are still valid in the context of the expected parameters. This function is a helper that can be used to validate changes made by a pool to a config when set_config() returns False. This expects that caps haven’t changed and that min_buffers aren’t lower then what we initially expected. This does not check if options or allocator parameters are still valid, won’t check if size have changed, since changing the size is valid to adapt padding.

Added in version 1.4.

Parameters:
  • caps – the excepted caps of buffers

  • size – the expected size of each buffer, not including prefix and padding

  • min_buffers – the expected minimum amount of buffers to allocate.

  • max_buffers – the expect maximum amount of buffers to allocate or 0 for unlimited.

do_acquire_buffer(self, params: BufferPoolAcquireParams | None = None) Tuple[FlowReturn, Buffer | None]#
Parameters:

params

do_alloc_buffer(self, params: BufferPoolAcquireParams | None = None) Tuple[FlowReturn, Buffer | None]#
Parameters:

params

do_flush_start(self) None#
do_flush_stop(self) None#
do_free_buffer(self, buffer: Buffer) None#
Parameters:

buffer

do_get_options(self) list[str]#
do_release_buffer(self, buffer: Buffer) None#
Parameters:

buffer

do_reset_buffer(self, buffer: Buffer) None#
Parameters:

buffer

do_set_config(self, config: Structure) bool#
Parameters:

config

do_start(self) bool#
do_stop(self) bool#
get_config() Structure#

Gets a copy of the current configuration of the pool. This configuration can be modified and used for the set_config() call.

get_options() list[str]#

Gets a None terminated array of string with supported bufferpool options for pool. An option would typically be enabled with config_add_option().

has_option(option: str) bool#

Checks if the bufferpool supports option.

Parameters:

option – an option

is_active() bool#

Checks if pool is active. A pool can be activated with the set_active() call.

release_buffer(buffer: Buffer) None#

Releases buffer to pool. buffer should have previously been allocated from pool with acquire_buffer().

This function is usually called automatically when the last ref on buffer disappears.

Parameters:

buffer – a Buffer

set_active(active: bool) bool#

Controls the active state of pool. When the pool is inactive, new calls to acquire_buffer() will return with FLUSHING.

Activating the bufferpool will preallocate all resources in the pool based on the configuration of the pool.

Deactivating will free the resources again when there are no outstanding buffers. When there are outstanding buffers, they will be freed as soon as they are all returned to the pool.

Parameters:

active – the new active state

set_config(config: Structure) bool#

Sets the configuration of the pool. If the pool is already configured, and the configuration hasn’t changed, this function will return True. If the pool is active, this method will return False and active configuration will remain. Buffers allocated from this pool must be returned or else this function will do nothing and return False.

config is a Structure that contains the configuration parameters for the pool. A default and mandatory set of parameters can be configured with config_set_params(), config_set_allocator() and config_add_option().

If the parameters in config can not be set exactly, this function returns False and will try to update as much state as possible. The new state can then be retrieved and refined with get_config().

This function takes ownership of config.

Parameters:

config – a Structure

set_flushing(flushing: bool) None#

Enables or disables the flushing state of a pool without freeing or allocating buffers.

Added in version 1.4.

Parameters:

flushing – whether to start or stop flushing

Virtual Methods#

class BufferPool
do_acquire_buffer(params: BufferPoolAcquireParams | None = None) Tuple[FlowReturn, Buffer | None]#

Acquires a buffer from pool. buffer should point to a memory location that can hold a pointer to the new buffer. When the pool is empty, this function will by default block until a buffer is released into the pool again or when the pool is set to flushing or deactivated.

params can contain optional parameters to influence the allocation.

Parameters:

params – parameters.

do_alloc_buffer(params: BufferPoolAcquireParams | None = None) Tuple[FlowReturn, Buffer | None]#

The type of the None singleton.

Parameters:

params – parameters.

do_flush_start() None#

The type of the None singleton.

Added in version 1.4.

do_flush_stop() None#

The type of the None singleton.

Added in version 1.4.

do_free_buffer(buffer: Buffer) None#

The type of the None singleton.

Parameters:

buffer – the Buffer to free

do_get_options() list[str]#

Gets a None terminated array of string with supported bufferpool options for pool. An option would typically be enabled with config_add_option().

do_release_buffer(buffer: Buffer) None#

Releases buffer to pool. buffer should have previously been allocated from pool with acquire_buffer().

This function is usually called automatically when the last ref on buffer disappears.

Parameters:

buffer – a Buffer

do_reset_buffer(buffer: Buffer) None#

The type of the None singleton.

Parameters:

buffer – the Buffer to reset

do_set_config(config: Structure) bool#

Sets the configuration of the pool. If the pool is already configured, and the configuration hasn’t changed, this function will return True. If the pool is active, this method will return False and active configuration will remain. Buffers allocated from this pool must be returned or else this function will do nothing and return False.

config is a Structure that contains the configuration parameters for the pool. A default and mandatory set of parameters can be configured with config_set_params(), config_set_allocator() and config_add_option().

If the parameters in config can not be set exactly, this function returns False and will try to update as much state as possible. The new state can then be retrieved and refined with get_config().

This function takes ownership of config.

Parameters:

config – a Structure

do_start() bool#

The type of the None singleton.

do_stop() bool#

The type of the None singleton.

Fields#

class BufferPool
flushing#

Whether the pool is currently gathering back outstanding buffers

object#

The parent structure

priv#