IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Une nouvelle version alpha de Python 3.12, plus rapide et plus légère, est désormais disponible
Et apporte plusieurs améliorations au niveau du multitraitement et de la gestion des erreurs

Le , par Anthony

9PARTAGES

7  0 
La version 3.12.0a7 de Python a été publiée le 7 mai 2023, avec des améliorations en termes de vitesse et d'efficacité.

Les développeurs principaux ont exposé les améliorations lors de la convention PyCon de cette année à Salt Lake City (Utah), notamment les efforts visant à réduire l'utilisation de la mémoire de Python, à rendre l'interpréteur plus rapide et à optimiser la compilation pour obtenir un code plus efficace :

Les sous-interpréteurs sont un mécanisme par lequel le moteur d'exécution de Python peut avoir plusieurs interpréteurs fonctionnant ensemble à l'intérieur d'un seul processus, par opposition à chaque interpréteur isolé dans son propre processus (le mécanisme actuel de multiprocessing)... Bien que les sous-interpréteurs soient disponibles dans le moteur d'exécution de Python depuis un certain temps, ils n'ont pas eu d'interface pour l'utilisateur final. De plus, l'état désordonné des composants internes de Python n'a pas permis d'utiliser les sous-interpréteurs de manière efficace. Avec Python 3.12, le développeur principal de Python, Eric Snow, et sa cohorte ont suffisamment nettoyé les éléments internes de Python pour rendre les sous-interpréteurs utiles, et ils ont ajouté un module minimal à la bibliothèque standard de Python, appelé interpréteurs. Les programmeurs disposent ainsi d'un moyen rudimentaire de lancer des sous-interpréteurs et d'y exécuter du code.

Les premières expériences de Snow avec les sous-interpréteurs ont permis d'obtenir des performances nettement supérieures à celles du threading et du multiprocessing. Un exemple, un simple service web qui effectuait des tâches liées au processeur, atteignait un maximum de 100 requêtes par seconde avec les threads et de 600 avec le multiprocessing. Mais avec les sous-interpréteurs, il a obtenu 11 500 requêtes, avec une baisse minime, voire nulle, lorsqu'il a été étendu depuis un seul client. Le module d'interprétation a des fonctionnalités très limitées pour l'instant, et il manque de mécanismes robustes pour partager l'état entre les sous-interpréteurs. Mais Snow pense que d'ici Python 3.13, beaucoup plus de fonctionnalités apparaîtront, et dans l'intervalle, les développeurs sont encouragés à expérimenter...

Python 3.11 a introduit de nouveaux bytecodes dans l'interpréteur, appelés instructions adaptatives. Ces instructions peuvent être remplacées automatiquement au moment de l'exécution par des versions spécialisées pour un type Python donné, un processus appelé quickening. Cela évite à l'interpréteur d'avoir à rechercher les types d'objets, ce qui accélère considérablement le processus. Par exemple, si une opération d'addition donnée prend régulièrement en compte deux entiers, cette instruction peut être remplacée par une autre qui suppose que les opérandes sont tous deux des entiers... Python 3.12 dispose de plus de codes opérationnels de spécialisation adaptative...

Et à partir de Python 3.12, les en-têtes d'objets utilisent désormais 96 octets, soit "un peu moins de la moitié de ce qu'ils étaient auparavant".


Résumé des points forts de la version

Nouvelles fonctionnalités de typage
  • PEP 688 : Rendre le protocole de tampon accessible dans Python
  • PEP 692 : Utilisation de TypedDict pour un typage **kwargs plus précis
  • PEP 698 : Surcharge du décorateur pour le typage statique

Dépréciations, suppressions ou restrictions importantes
  • PEP 623 : Suppression de wstr de l'Unicode
  • PEP 632 : Suppression du paquet distutils

Messages d'erreur améliorés

  • Les modules de la bibliothèque standard sont maintenant potentiellement suggérés dans les messages d'erreur affichés par l'interpréteur lorsqu'une NameError est remontée au niveau supérieur.

Code : Sélectionner tout
1
2
3
4
>>> sys.version_info
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined. Did you forget to import 'sys'?

  • Amélioration de la suggestion d'erreur pour les exceptions NameError pour les instances. Maintenant, si une NameError est relevée dans une méthode et que l'instance a un attribut qui est exactement égal au nom dans l'exception, la suggestion inclura self.<NAME> au lieu de la correspondance la plus proche dans la portée de la méthode.

Code : Sélectionner tout
1
2
3
4
5
6
>>> class A:
...   def __init__(self):
...       self.blech = 1
...
...   def foo(self):
...       somethin = blech
Code : Sélectionner tout
1
2
3
4
5
>>>A().foo()
  File "<stdin>", line 1
    somethin = blech
              ^^^^^
NameError: name 'blech' is not defined. Did you mean: 'self.blech'?

  • Amélioration du message d'erreur SyntaxError lorsque l'utilisateur tape import x from y au lieu de from y import x.

Code : Sélectionner tout
1
2
3
4
5
>>>import a.y.z from b.y.z
  File "<stdin>", line 1
    import a.y.z from b.y.z
    ^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Did you mean to use 'from ... import ...' instead?

  • Les exceptions ImportError soulevées en cas d'échec de l'instruction from <module> import <name> incluent désormais des suggestions pour la valeur de <name> en fonction des noms disponibles dans <module>.

Code : Sélectionner tout
1
2
3
4
>>> from collections import chainmap
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?

Nouvelles fonctionnalités

  • Ajout de la prise en charge par Python du profileur Linux perf via la nouvelle variable d'environnement PYTHONPERFSUPPORT, la nouvelle option de ligne de commande -X perf, ainsi que les nouvelles API sys.activate_stack_trampoline(), sys.deactivate_stack_trampoline(), et sys.is_stack_trampoline_active().
  • Les méthodes d'extraction dans tarfile, et shutil.unpack_archive(), ont un nouvel argument filtre qui permet de limiter les fonctionnalités de tar qui peuvent être surprenantes ou dangereuses, telles que la création de fichiers en dehors du répertoire de destination. Voir Filtres d'extraction pour plus de détails. Dans Python 3.14, la valeur par défaut sera 'data'.

PEP 688 : Rendre le protocole de tampon accessible dans Python

La PEP 688 introduit un moyen d'utiliser le protocole de tampon à partir du code Python. Les classes qui implémentent la méthode __buffer__() sont maintenant utilisables comme types de tampons.

Le nouvel ABC (Abstract Base Classes) collections.abc.Buffer fournit un moyen standard de représenter les objets tampons, par exemple dans les annotations de type. Le nouvel enum inspect.BufferFlags représente les flags qui peuvent être utilisés pour personnaliser la création de tampons.

Nouvelles fonctionnalités liées aux indications de type

Cette section couvre les changements majeurs affectant les indications de type PEP 484 et le module typing.

PEP 692 : Utilisation de TypedDict pour un typage **kwargs plus précis

Le typage des **kwargs dans une signature de fonction, tel qu'introduit par le PEP 484, ne permettait des annotations valides que dans les cas où tous les **kwargs étaient du même type.

Cette PEP spécifie une manière plus précise de typer les **kwargs en s'appuyant sur les dictionnaires typés :

Code : Sélectionner tout
1
2
3
4
5
6
7
from typing import TypedDict, Unpack

class Movie(TypedDict):
  name: str
  year: int

def foo(**kwargs: Unpack[Movie]): ...

Voir la PEP 692 pour plus de détails.

Source : Nouveautés dans Python 3.12

Et vous ?

Que pensez-vous des nouveautés apportées par la version 3.12 de Python ?

Quelles améliorations vous intéressent le plus ?

Voir aussi

Python est le langage de programmation le plus utilisé et il ne montre aucun signe de ralentissement, selon l'index TIOBE de janvier 2022

Python 3.11 est disponible et s'accompagne d'une amélioration de la vitesse, de meilleures gestion des erreurs, du type self ainsi que des notes d'exception

JetBrains lance le programme d'accès anticipé (EAP) à PyCharm 2023.1, la première mise à jour majeure de l'année de son EDI Python

Une erreur dans cette actualité ? Signalez-nous-la !