Skip to content

Instantly share code, notes, and snippets.

@dunossauro
Last active October 15, 2024 12:14
Show Gist options
  • Save dunossauro/afea7800f06d7bd1b23f8bff71bc74e1 to your computer and use it in GitHub Desktop.
Save dunossauro/afea7800f06d7bd1b23f8bff71bc74e1 to your computer and use it in GitHub Desktop.
Comparação versões python 3.13
# Build das 6 variaç
services:
tres_ponto_doze:
build:
context: .
args:
PYVERSION: 3.12.0
PYTHON_CONFIGURE_OPTS: ""
sem_jit_sem_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=no --disable-gil"
sem_jit_com_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=no"
com_jit_com_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=yes"
com_jit_sem_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=yes --disable-gil"
com_t2_com_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=interpreter"
com_t2_sem_gil:
build:
context: .
args:
PYVERSION: 3.13.0
PYTHON_CONFIGURE_OPTS: "--enable-experimental-jit=interpreter --disable-gil"
# builds feitos com pyenv
FROM ubuntu:latest
ARG PYVERSION
ARG PYTHON_CONFIGURE_OPTS
ENV PYTHON_CONFIGURE_OPTS=$PYTHON_CONFIGURE_OPTS
ENV PYVERSION=$PYVERSION
WORKDIR /
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
curl \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev \
libffi-dev \
liblzma-dev \
git \
lsb-release \
software-properties-common \
gnupg
RUN wget https://apt.llvm.org/llvm.sh
RUN chmod +x llvm.sh
RUN ./llvm.sh 18
RUN git clone https://github.com/pyenv/pyenv.git /pyenv
ENV PYENV_ROOT /pyenv
RUN eval "$(/pyenv/bin/pyenv init -)"
RUN /pyenv/bin/pyenv install $PYVERSION
RUN /pyenv/bin/pyenv global $PYVERSION
COPY nilo.py .
CMD /pyenv/versions/$PYVERSION/bin/python nilo.py
"""
Código gerado pelo nilo com algumas modificações
link: https://blog.nilo.pro.br/posts/2024-10-08-python313/
"""
import time
import threading
import multiprocessing
import contextlib
CARGA = 10_000_000
import sys, sysconfig
if sys.version_info.minor != 12:
versions = {
'Tier 2': 'TIER2' in sysconfig.get_config_var("PY_CORE_CFLAGS"),
'JIT': 'Py_JIT' in sysconfig.get_config_var("PY_CORE_CFLAGS"),
'GIL': sys._is_gil_enabled()
}
print(versions)
def trabalho(name):
# print(f" + Trabalho {name} iniciando")
z = 0
for i in range(CARGA):
z += i
# print(f" - Trabalho {name} acabando")
@contextlib.contextmanager
def cronometro(mensagem):
start_time = time.time()
yield
end_time = time.time()
print(f"{mensagem}: Tempo: {end_time - start_time}")
def com_threads():
threads = []
for i in range(multiprocessing.cpu_count()):
threads.append(threading.Thread(target=trabalho, args=(i,)))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
def sem_threads():
for z in range(multiprocessing.cpu_count()):
trabalho(z)
if __name__ == "__main__":
with cronometro("Com threads"):
com_threads()
with cronometro("Sem threads"):
sem_threads()

Variações de Builds com a Versão 3.13 do Python

Build Descrição JIT GIL Tempo com Threads Tempo sem Threads
1. sem_jit_sem_gil Tier 1 otimização ativado, GIL desabilitado 1.2694120407104492 10.44282841682434
2. sem_jit_com_gil Tier 1 otimização ativado, GIL habilitado 8.720726251602173 8.68326449394226
3. com_jit_sem_gil Tier 2 ativado via JIT, GIL desabilitado 1.2484943866729736 10.602696895599365
4. com_jit_com_gil Tier 2 ativado via JIT, GIL habilitado 7.9310455322265625 8.0850510597229
5. com_t2_com_gil Tier 2 ativado via interpretador, GIL habilitado 10.837177515029907 10.850578308105469
6. com_t2_sem_gil Tier 2 ativado via interpretador, GIL desabilitado 1.1947920322418213 10.301758527755737
7. tres_ponto_doze Versão 3.12 - - 8.620326042175293 9.007946491241455

Observações

  • Tempo com Threads: Tempo gasto utilizando múltiplas threads.
  • Tempo sem Threads: Tempo gasto utilizando uma única thread.

Tabela pegada em https://gist.github.com/abanzy/b97ef25e826713bec8156721f4e23d44


Variações de builds possíves com a versão 3.13 do python

  • sem_jit_sem_gil: Apenas com tier 1 de otimização ativado e com gil desabilitado
sem_jit_sem_gil-1  | {'Tier 2': False, 'JIT': False, 'GIL': False}
sem_jit_sem_gil-1  | Com threads: Tempo: 1.2694120407104492
sem_jit_sem_gil-1  | Sem threads: Tempo: 10.44282841682434
sem_jit_sem_gil-1 exited with code 0
  • sem_jit_com_gil: Apenas com tier 1 de otimização ativado e com gil habilitado
sem_jit_com_gil-1  | {'Tier 2': False, 'JIT': False, 'GIL': True}
sem_jit_com_gil-1  | Com threads: Tempo: 8.720726251602173
sem_jit_com_gil-1  | Sem threads: Tempo: 8.68326449394226
sem_jit_com_gil-1 exited with code 0
  • com_jit_sem_gil: Com tier 2 ativado via JIT e com gil desabilitado
com_jit_sem_gil-1  | {'Tier 2': True, 'JIT': True, 'GIL': False}
com_jit_sem_gil-1  | Com threads: Tempo: 1.2484943866729736
com_jit_sem_gil-1  | Sem threads: Tempo: 10.602696895599365
com_jit_sem_gil-1 exited with code 0
  • com_jit_com_gil: Com tier 2 ativado via JIT e com gil habilitado
com_jit_com_gil-1  | {'Tier 2': True, 'JIT': True, 'GIL': True}
com_jit_com_gil-1  | Com threads: Tempo: 7.9310455322265625
com_jit_com_gil-1  | Sem threads: Tempo: 8.0850510597229
com_jit_com_gil-1 exited with code 0
  • com_t2_com_gil: Com tier 2 ativado via interpretador e com gil habilitado
com_t2_com_gil-1  | {'Tier 2': True, 'JIT': False, 'GIL': True}
com_t2_com_gil-1  | Com threads: Tempo: 10.837177515029907
com_t2_com_gil-1  | Sem threads: Tempo: 10.850578308105469
com_t2_com_gil-1 exited with code 0
  • com_t2_sem_gil: Com tier 2 ativado via interpretador e com gil desabilitado
com_t2_sem_gil-1  | {'Tier 2': True, 'JIT': False, 'GIL': False}
com_t2_sem_gil-1  | Com threads: Tempo: 1.1947920322418213
com_t2_sem_gil-1  | Sem threads: Tempo: 10.301758527755737
com_t2_sem_gil-1 exited with code 0
  • tres_ponto_doze: Versão 3.12
tres_ponto_doze-1  | Com threads: Tempo: 8.620326042175293
tres_ponto_doze-1  | Sem threads: Tempo: 9.007946491241455
tres_ponto_doze-1 exited with code 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment