Poolex

Build and tests workflowhex.pm versionHex DocsLicenseWeekly DownloadsTotal DownloadsElixir Forum

Poolex is a library for managing pools of workers. Inspired by poolboy.

See the Poolex Playground — interactive page to play with the library.

[!IMPORTANT]
Documentation on GitHub corresponds to the current branch. For stable versions' docs see Hexdocs.

Table of Contents

Poolex logo

Features

Poolex makes working with worker pools easy and flexible:

Why choose poolex over poolboy?

Requirements

Library Elixir Erlang/OTP
>= 1.4.0>= 1.17>= 25
1.3.0>= 1 .11>= 24
from 0.1.0 to 1.2.1>= 1.7>= 22

Installation

Add :poolex to your list of dependencies in mix.exs:

def deps do
  [
    {:poolex, "~> 1.0"}
  ]
end

Usage

In the most typical use of Poolex, you only need to start a pool of workers as a child of your application.

children = [
  {Poolex,
    worker_module: SomeWorker,
    workers_count: 5}
]

Supervisor.start_link(children, strategy: :one_for_one)

Then you can execute any code on the workers with run/3:

iex> Poolex.run(SomeWorker, &(is_pid?(&1)), checkout_timeout: 1_000)
{:ok, true}

For long-running operations where you need to hold onto a worker (like maintaining a database connection for a TCP session), use acquire/2 and release/2:

iex> {:ok, worker} = Poolex.acquire(SomeWorker)
iex> # Use worker for as long as needed...
iex> GenServer.call(worker, :some_operation)
iex> Poolex.release(SomeWorker, worker)
:ok

Workers acquired with acquire/2 are automatically cleaned up if your process crashes, preventing resource leaks. The implementation is safe against double-release and ensures workers can only be released by their owner process.

A detailed description of the available configuration options and usage examples can be found in the documentation.

Guides

Used by

Aviasales

Contributions

If you think something can be improved or have any questions about specific behaviors or implementation details, please feel free to file an issue. Proposed changes should be discussed in issues before submitting any PRs, to avoid spending time on code that might not be merged upstream.

If you are ready to change the project, please read the Contributing guide first.

Support the Project

If you find Poolex useful, please consider supporting its development! You can:

Your support helps keep the project active and maintained. Thank you!