After following the installation steps, pyjion is a python module that you can import a Python 3.10 environment:
python -m pip install pyjion
After importing pyjion, enable the JIT using the enable function:
import pyjion; pyjion.enable()
Any Python code you define or import after enabling pyjion will be JIT compiled. You don’t need to execute functions in any special API, it’s completely transparent:
>>> def half(x):
... return x/2
>>> half(2)
1.0
You can also execute Pyjion against any script or module:
pyjion my_script.py
Or, for an existing Python module:
pyjion -m calendar
That’s it! For the full API, checkout the documentation.
Benchmarks
Data is on a Linux X86_64 machine. Benchmark scripts are in the Pyjion source repo. Some benchmarks have a slow max/mean value because the time includes JIT-compiling large libraries like Pandas.
Technology
Pyjion is a JIT compiler. It compiles native CPython bytecode into machine code. Without Pyjion, CPython uses a master evaluation loop (called the frame evaluation loop) to iterate over opcodes The Pyjion compiler has 3 main stages:
Build a “stack table” of the abstract types at each opcode position
Compile CPython opcodes into IL (ECMA335 CIL) instructions
Emit the CIL opcodes into the .NET EE compiler to convert to native machine code/assembly