Added
-
OWN_GIL Mode - True parallel Python execution with Python 3.14+ subinterpreters. Each subinterpreter runs with its own GIL in a dedicated thread, enabling true parallelism for CPU-bound workloads.
-
Process-Bound Python Environments - Per-Erlang-process Python namespaces with isolated globals/locals that persist across calls.
-
Event Loop Pool -
py_event_loop_pooldistributes async tasks with scheduler-affinity routing. -
ByteChannel API - Raw byte streaming without term serialization. Ideal for HTTP bodies, file streaming, binary protocols.
-
PyBuffer API - Zero-copy buffer for WSGI input streams with file-like interface.
-
True streaming API -
py:stream_start/3,4andpy:stream_cancel/1for event-driven streaming from Python generators. -
erlang.whereis(name)- Lookup registered Erlang PIDs from Python. -
erlang.schedule_inline(callback)- Inline continuation scheduling. -
py:spawn_call/3,4,5- Fire-and-forget with result delivery. -
Explicit bytes conversion -
{bytes, Binary}tuple for round-trip safety. -
Import caching API -
py:import/1,2,py:add_import/1,2,py:add_path/1. -
Per-interpreter preload code - Execute code in new interpreters with inherited globals.
Fixed
- Channel notification for create_task
- Channel waiter race condition
- Event loop isolation and resource safety
- Python 3.14 venv activation
- OWN_GIL safety fixes (mutex leak, deadlock prevention, env validation)
Changed
py:castis now fire-and-forget (usepy:spawn_callfor results)- OWN_GIL requires Python 3.14+
- Removed auto-started io pool
- Removed py_event_router
- Config-based initialization for imports/paths
Performance
- Direct NIF channel operations (up to 1760x speedup)
- nif_process_ready_tasks optimization (~15% improvement)
See CHANGELOG.md for full details.