Descubriendo las últimas mejoras en la programación de Python

Características bastante interesantes

Python la tendencia del futuro

En el artículo anterior, se le han presentado las principales mejoras y avances en Python 3.11. Sin embargo, hay características adicionales que pueden no ser tan prominentes, pero que sin embargo son dignas de mención. En esta sección, profundizaremos en algunas de estas características, incluida una mayor velocidad, modificaciones a las excepciones y una pequeña mejora en el formato de cadena.

Velocidad de inicio mejorada

Uno de los resultados emocionantes del proyecto Faster CPython son los tiempos de inicio más rápidos. Cuando inicia un script de Python, el intérprete se somete a varios procesos de inicialización, lo que hace que incluso los programas simples tarden unos milisegundos en ejecutarse en Windows, Linux y macOS.

PS> Measure-Command {python -c "pass"}

 

 

La opción "-c" se utiliza para pasar un programa directamente a través de la línea de comandos. Cuando se utiliza, todo el programa está representado por una sola instrucción de paso, que no tiene ningún efecto.

 

En la mayoría de los casos, el tiempo necesario para iniciar un programa es insignificante en comparación con el tiempo necesario para ejecutar el código. Sin embargo, en scripts más cortos, comúnmente utilizados en aplicaciones de línea de comandos, el tiempo de inicio puede tener un impacto significativo en el rendimiento del programa.

 

Como ilustración, considere el siguiente guión, que se inspiró en el clásico programa cowsay:

# snakesay.py# Importar el módulo sys

import  sys# Unir todos los argumentos pasados en la línea de comandos después del nombre del script message = " ".

join(sys.argv[

1:])# Calcular la longitud del mensajebubble_length = len(

message

) + 2# Usar el literal rf string para crear la cadena de salidaprint

(
 rf"""  {"

_"
 * bubble_length} ( {message} )
{
" ̅" * bubble_length
} \ \ __ \ [oo] (__)\ λ \\ _\\__ (_____)_  (___
 _)Oo°""")

En el snakesay.py de script, el usuario introduce un mensaje a través de la línea de comandos. El mensaje se muestra dentro de una burbuja de diálogo junto con un lindo gráfico de serpiente. El usuario puede introducir cualquier mensaje que desee, como se muestra en el ejemplo siguiente:

$ python snakesay.py Inicio más rápido!       _____ ( Inicio más rápido! )       ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ \ \ __ \ [oo] (__)\ λ \\ _\\__ (_____)_ (___)Oo°


Este script sirve como un ejemplo básico de una aplicación de línea de comandos, que generalmente se ejecuta rápidamente. Sin embargo, todavía tarda unos milisegundos en ejecutarse debido a la sobrecarga causada por Python importando varios módulos, incluso aquellos que no son importados explícitamente por el usuario.

El código siguiente muestra cómo medir el tiempo dedicado a importar módulos mediante la opción -X importtime en Python.

# snakesay.py
  import sys
import time
 # Añadido para mostrar el mensaje de tiempo de importación = " ".join(sys.argv[1

:])bubble_length = len(message) + 2# Código para imprimir el mensaje en la burbuja de diálogo junto con una
huella de serpiente( rf"""

 {"
_
 "
* bubble_length}  (
{
message} )  {"
̅
" * bubble_length} \ \ __ \ [oo] (__)\ λ \\ _\\__ (_____)_ (_____)Oo°""")
 

 

Para utilizar la opción -X importtime , ejecute el siguiente comando en su terminal:

$ python -X importtime -S snakesay.py ¡Las importaciones son más rápidas!

Esto generará el tiempo dedicado a importar cada módulo en microsegundos:

Tiempo de importación: Self [US] | Acumulado | Tiempo de importación del paquete importado:
  283 |        283 |   _io
tiempo de importación: 56 |         56 |   Tiempo de importación del mariscal
:
647 |        647 |   Tiempo de importación de POSIX
:
587 |       1573 | _frozen_importlib_external
tiempo de importación: 167 |        167 |   Tiempo
de importación: 191 |        358 | Tiempo de
importación de  Zipimport: 90 |         90 |     _codecs
tiempo de importación: 561 |        651 |   Tiempo de importación de códecs
:
825 |        825 |   Tiempo de importación de encodings.aliases
:
1136 |       2611 | Tiempo de importación de codificaciones
:
417 |        417 | encodings.utf_8
tiempo de importación: 174 |        174 | _signal
tiempo de importación: 56 |         56 |     _abc
tiempo de importación: 251 |        306 |   Tiempo
de importación  ABC: 310 |        616 | io

La última columna, paquete importado, muestra la jerarquía de los módulos importados. Por ejemplo, abc fue importado por io. Esta información puede ser útil para identificar qué módulos pueden tardar más en importarse y, por lo tanto, contribuir al tiempo total de importación.


Next Post Previous Post