Packages
snakepit
0.3.1
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
Files
Jump to
Current section
Files
lib/snakepit/application.ex.bak
defmodule Snakepit.Application do
@moduledoc """
Application supervisor for Snakepit pooler.
Starts the core infrastructure:
- Registry for worker process registration
- ProcessRegistry for Python PID tracking
- SessionStore for session management
- WorkerSupervisor for managing worker processes
- Pool manager for request distribution
"""
use Application
require Logger
@impl true
def start(_type, _args) do
# Check if pooling is enabled (default: false to prevent auto-start issues)
pooling_enabled = Application.get_env(:snakepit, :pooling_enabled, false)
children =
if pooling_enabled do
pool_config = Application.get_env(:snakepit, :pool_config, %{})
pool_size = Map.get(pool_config, :pool_size, System.schedulers_online() * 2)
Logger.info("🚀 Starting Snakepit with pooling enabled (size: #{pool_size})")
[
# Registry for worker process registration
Snakepit.Pool.Registry,
# Process registry for Python PID tracking
Snakepit.Pool.ProcessRegistry,
# Session store for session management
Snakepit.Bridge.SessionStore,
# Worker supervisor for managing worker processes
Snakepit.Pool.WorkerSupervisor,
# Main pool manager
{Snakepit.Pool, [size: pool_size]}
]
else
Logger.info("🔧 Starting Snakepit with pooling disabled")
[]
end
opts = [strategy: :one_for_one, name: Snakepit.Supervisor]
Supervisor.start_link(children, opts)
end
end