Le profileur de Python, cProfilegénère des rapports qui montrent quelles fonctions prennent le plus de temps dans un programme Python donné. Par défaut, le code Cython n'apparaît pas dans ces rapports. Cependant, vous pouvez activer le profilage sur le code Cython en insérant une directive du compilateur en haut du fichier .pyx fichier avec les fonctions que vous souhaitez inclure dans le profilage :
# cython: profile=True
Vous pouvez également activer le traçage ligne par ligne sur le code C généré par Cython. Faire cela impose beaucoup de surcharge, c'est donc désactivé par défaut. (Le profilage impose généralement une surcharge, alors assurez-vous de le désactiver pour le code envoyé en production.)
Cython peut également générer des rapports de code indiquant la quantité d'un .pyx Le fichier est en cours de conversion en C et quelle quantité reste du code Python. Le setup.py Le fichier de notre exemple l'a spécifié avec le annotate=True déclaration dans le cythonize() fonction.
Supprimer le .c fichiers générés dans le projet et réexécutez le setup.py script pour tout recompiler. Lorsque vous avez terminé, vous devriez voir un fichier HTML dans le même répertoire qui partage le nom de votre .pyx fichier – dans ce cas, num.html. Ouvrez le fichier HTML et vous verrez les parties de votre code qui dépendent toujours de Python surlignées en jaune. Vous pouvez cliquer sur les zones jaunes pour voir le code C sous-jacent généré par Cython.
Un rapport d'annotation de code Cython. Les surlignages jaunes indiquent les parties du code qui dépendent toujours du runtime Python.
IDG
Dans ce cas, le def f la fonction est toujours surlignée en jaune, même si ses variables sont explicitement saisies. Pourquoi? Parce qu'il n'est pas annoté explicitement en tant que fonction Cython. Cython assume toute fonction non annotée avec @cython.cfunc n'est qu'une fonction Python, et non convertible en C pur.
Vous pouvez résoudre ce problème en modifiant le def f déclaration à lire :
@cython.cfunc
def f(x: cython.double) -> cython.double:
Enregistrez et recompilez le fichier, puis rechargez le rapport. Vous devriez maintenant voir le def f la fonction n'est plus surlignée en jaune ; c'est du C pur.

La fonction Cython révisée, désormais en C pur, ne génère aucun surlignage.
IDG
Notez que si le profilage est activé comme décrit ci-dessus, même les fonctions C « pures » afficheront une certaine surbrillance, car elles ont été décorées avec du code de trace qui rappelle les composants internes de Python.
A noter également que l'opération de division dans la ligne 12 est également mise en évidence ; en effet, Cython insère automatiquement des tests de division par zéro et déclenche une exception Python si tel est le cas. Vous pouvez désactiver cela avec le cdivision directive du compilateur, ou au moyen d'un décorateur sur la fonction (@cython.cdivision(True)).
Ressources Cython
Maintenant que vous avez une idée de la façon dont Cython s'intègre à une application Python existante, l'étape suivante consiste à le mettre en œuvre dans vos propres applications et à utiliser d'autres ressources disponibles :

