Skip to content

v2.2.0

Latest

Choose a tag to compare

@benoitc benoitc released this 24 Mar 01:36

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_pool distributes 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,4 and py:stream_cancel/1 for 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:cast is now fire-and-forget (use py:spawn_call for 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.