Erlang_python - Run Python across your Elixir cluster

you can run benchmarks in the example folder:

➜  erlang-python git:(main) ✗ escript examples/bench_channel_async.erl

========================================
Channel Benchmark: Sync vs Async
========================================

System Information:
  Erlang/OTP: 28
  Python: 3.9.6 (default, Dec  2 2025, 07:27:58)
[Clang 17.0.0 (clang-1700.6.3.2)]

Python channel helpers ready.

--- Sync Channel Benchmark ---
(Erlang send + NIF try_receive - pure Erlang)

    Size |   Throughput |     Avg (us)
--------------------------------------
      64 |     10416667 |         0.10
    1024 |      6180470 |         0.16
   16384 |       833472 |         1.20

--- Async Task API Benchmark ---
(py_event_loop:create_task + await using stdlib)

      Operation |   Throughput |     Avg (us)
--------------------------------------------
      math.sqrt |       101174 |         9.88
     concurrent |       374111 |         2.67

--- Sync vs Async Comparison ---
(Channel operations: NIF sync vs py:call)

Message size: 1024 bytes, Iterations: 1000

         Method |    Time (ms) |   Throughput
---------------------------------------------
       NIF sync |         0.20 |      5102041
   py:call sync |         4.38 |       228154
     async task |         8.10 |       123426
    spawn batch |         3.38 |       295508

NIF sync is 22.4x faster than py:call
NIF sync is 41.3x faster than async task
Spawn batch is 2.4x faster than sequential async

========================================
Benchmark Complete
========================================

It’s used in a coming product and you can find it used in barrel_embed and some other products like hornbeam. recently I only merged and fixed . I’m pushing version when i introduce breaking change, also. The moment I start to use it for supported products it becomes 1.0.

1 Like