Poolex is a library for managing pools of workers. Inspired by poolboy.
Important
Documentation on GitHub corresponds to the current branch. For stable versions' docs see Hexdocs.
With Poolex, you can:
- Launch multiple pools of workers and then access the free ones from anywhere in the application.
- Configure the pool to run additional temporary workers if the load increases.
- Analyze and optimize your pool's production settings using metrics.
- Use your own implementations to define the logic for worker and caller process access.
- Configure delayed shutdown for workers. This is useful if creating workers is a resource-intensive operation.
Why poolex
instead of poolboy
?
poolex
is written in Elixir. This library is much more convenient for use in Elixir projects.poolboy
is a great library, but not actively maintained 😿
Library | Elixir | Erlang/OTP |
---|---|---|
from 0.1.0 to 1.2.1 |
>= 1.7 |
>= 22 |
1.3.0 |
>= 1 .11 |
>= 24 |
>= 1.4.0 |
>= 1.17 |
>= 25 |
Add :poolex
to your list of dependencies in mix.exs
:
def deps do
[
{:poolex, "~> 1.0"}
]
end
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}
A detailed description of the available configuration options and usage examples can be found in the documentation.
- Getting Started
- Migration from
:poolboy
- Example of use
- Working with metrics
- Workers and callers implementations
- Using
worker_shutdown_delay
for Overflow Workers
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.
If you find Poolex useful, please consider supporting its development! You can:
- ⭐ Star the project on GitHub
- 💖 Sponsor the author on GitHub Sponsors
Your support helps keep the project active and maintained. Thank you!