Maison >développement back-end >Tutoriel Python >Accélérer le code Python avec C (et pas de bibliothèques supplémentaires)
REMARQUE : Publié à l'origine dans mon sous-stack : https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and
Python n'est pas le paradigme de la vitesse, nous le savons tous. Mais nous pouvons accélérer certaines parties critiques de nos applications avec l'aide de notre bon vieil ami C.
La séquence de Fibonacci est un exemple classique utilisé pour enseigner le développement de logiciels. Est une série de nombres commençant par 0 et 1. Chaque nombre suivant est la somme des deux précédents. Ainsi, la séquence ressemble à ceci : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Nous pouvons développer Fibonacci en python de cette manière :
import time # Configure iterations iterations = 30 # Define fibonacci in native python def fibonacci(n): if n <= 1: return n else: return fibonacci(n-1) + fibonacci(n-2) # Calculate in pure python start_time = time.perf_counter() print(f"Calculating {iterations} iterations of fibonacci...") print(fibonacci(iterations)) end_time = time.perf_counter() execution_time_ms = (end_time - start_time) * 1000 print(f"Execution time: {execution_time_ms:.2f} milliseconds") print()
Si nous exécutons cette version pure Python (dans une machine virtuelle Google IDX) de Fibonacci, nous obtenons :
On peut développer la même séquence en simple C :
#include <stdio.h> int fibonacci(int n) { if (n <= 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } }
Compilez la bibliothèque avec GCC :
gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c
Maintenant, nous avons une bibliothèque binaire native avec la fonction de séquence de Fibonacci à l'intérieur. Nous pouvons intégrer cette bibliothèque dans une application Python avec ctypes (la bibliothèque de types Python C, car Python lui-même est développé en C) :
import time from ctypes import c_double, c_int, CDLL # Configure iterations iterations = 30 # Import the C library library = CDLL('./fibonacci.so') fibonacciAsLibrary = library.fibonacci fibonacciAsLibrary.restype = c_int # Calculate as C library start_time = time.perf_counter() print(f"Calculating {iterations} iterations of fibonacci as C library...") print(fibonacciAsLibrary(iterations)) end_time = time.perf_counter() execution_time_ms = (end_time - start_time) * 1000 print(f"Execution time: {execution_time_ms:.2f} milliseconds") print()
Maintenant, si on exécute cette version sur Fibonacci, on obtient :
Mieux, n'est-ce pas ?
Nous pouvons utiliser ce type d'intégration dans de nombreuses applications et scénarios, comme :
Et vous ? Comment allez-vous utiliser cette petite astuce dans votre projet ? J'adorerais entendre vos commentaires !
Parmi les articles Python et Docker, j'écrirai également sur d'autres sujets connexes (toujours des sujets de technologie et de programmation, promis... en croisant les doigts), comme :
Si vous avez trouvé une technologie, un langage de programmation ou autre intéressant, n'hésitez pas à me le faire savoir ! Je suis toujours ouvert à apprendre quelque chose de nouveau !
Je m'appelle Andrés, un développeur de logiciels full-stack basé à Palma, en quête personnelle d'amélioration de mes compétences en codage. Je suis également un écrivain fantastique auto-publié avec quatre romans publiés à mon actif. N'hésitez pas à me demander n'importe quoi !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!