Heim > Artikel > Backend-Entwicklung > Python-Code mit C beschleunigen (und ohne zusätzliche Bibliotheken)
HINWEIS: Ursprünglich in meinem Substack gepostet: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and
Python ist nicht das Paradigma der Geschwindigkeit, das wissen wir alle. Aber mit Hilfe unseres guten alten Freundes C. können wir einige kritische Teile unserer Apps beschleunigen.
Die Fibonacci-Folge ist ein klassisches Beispiel für den Unterricht in der Softwareentwicklung. Ist eine Reihe von Zahlen, die mit 0 und 1 beginnt. Jede nachfolgende Zahl ist die Summe der beiden vorherigen. Die Reihenfolge sieht also so aus: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Wir können Fibonacci in Python folgendermaßen entwickeln:
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()
Wenn wir diese reine Python-Version (in einer virtuellen Google IDX-Maschine) von Fibonacci ausführen, erhalten wir:
Wir können die gleiche Sequenz in einfachem C: entwickeln
#include <stdio.h> int fibonacci(int n) { if (n <= 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } }
Kompilieren Sie die Bibliothek mit GCC:
gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c
Jetzt haben wir eine native Binärbibliothek mit der Fibonacci-Sequenzfunktion darin. Wir können diese Bibliothek mit ctypes (der Python-C-Typenbibliothek, da Python selbst in C entwickelt wurde) in eine Python-App einbetten:
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()
Wenn wir nun diese Version auf Fibonacci ausführen, erhalten wir:
Besser, nicht wahr?
Wir können diese Art der Integration in vielen Apps und Szenarien verwenden, wie zum Beispiel:
Und du? Wie werden Sie diesen kleinen Trick in Ihrem Projekt anwenden? Ich würde gerne Ihre Kommentare hören!
Neben den Python- und Docker-Beiträgen werde ich auch über andere verwandte Themen schreiben (immer Technik- und Programmierthemen, das verspreche ich ... mit gedrückten Daumen), wie zum Beispiel:
Wenn Sie eine interessante Technologie, Programmiersprache oder was auch immer gefunden haben, lassen Sie es mich bitte wissen! Ich bin immer offen dafür, etwas Neues zu lernen!
Ich bin Andrés, ein Full-Stack-Softwareentwickler mit Sitz in Palma, auf einer persönlichen Reise, um meine Programmierfähigkeiten zu verbessern. Ich bin auch ein selbstveröffentlichter Fantasy-Autor mit vier veröffentlichten Romanen. Fühlen Sie sich frei, mich alles zu fragen!
Das obige ist der detaillierte Inhalt vonPython-Code mit C beschleunigen (und ohne zusätzliche Bibliotheken). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!