v1.4.0 - Erlang-native asyncio event loop
Added
-
Erlang-native asyncio event loop - Custom asyncio event loop backed by Erlang's scheduler
ErlangEventLoopclass inpriv/erlang_loop.py- Sub-millisecond latency via Erlang's
enif_select(vs 10ms polling) - Zero CPU usage when idle - no busy-waiting or polling overhead
- Full GIL release during waits for better concurrency
- Native Erlang scheduler integration for I/O events
- Event loop policy via
get_event_loop_policy()
-
TCP support for asyncio event loop
create_connection()- TCP client connectionscreate_server()- TCP server with accept loop_ErlangSocketTransport- Non-blocking socket transport with write buffering_ErlangServer- TCP server withserve_forever()support
-
UDP/datagram support for asyncio event loop
create_datagram_endpoint()- Create UDP endpoints with full parameter support_ErlangDatagramTransport- Datagram transport implementation- Parameters:
local_addr,remote_addr,reuse_address,reuse_port,allow_broadcast DatagramProtocolcallbacks:datagram_received(),error_received()- Support for both connected and unconnected UDP
-
Asyncio event loop documentation
- New documentation:
docs/asyncio.md
- New documentation:
Performance
- Event loop optimizations
- Fixed
run_until_completecallback removal bug - Cached
ast.literal_evallookup at module initialization - O(1) timer cancellation via handle-to-callback_id reverse map
- Detach pending queue under mutex, build Erlang terms outside lock
- O(1) duplicate event detection using hash set
- Added
PERF_BUILDcmake option for aggressive optimizations (-O3, LTO, -march=native)
- Fixed
Full Changelog: https://github.com/benoitc/erlang-python/blob/main/CHANGELOG.md