Heim >Backend-Entwicklung >Python-Tutorial >Python-Code mit C beschleunigen (und ohne zusätzliche Bibliotheken)

Python-Code mit C beschleunigen (und ohne zusätzliche Bibliotheken)

WBOY
WBOYOriginal
2024-08-21 15:47:021019Durchsuche

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.

Speeding up Python code with C (and no extra libraries)

Die Fibonacci-Folge in einfachem Python

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:

  • 10 Iterationen: 5,77 Millisekunden
  • 30 Iterationen: 984,36 Millisekunden
  • 50 Iterationen: (Ich muss den Vorgang abbrechen, zu viel Zeit)

Die Fibonacci-Folge in C

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:

  • 10 Iterationen: 0,54 Millisekunden
  • 30 Iterationen: 6,92 Millisekunden
  • 50 Iterationen: 82324,90 Millisekunden

Besser, nicht wahr?

Anwendungsfälle für die Python- und C-Integration

Wir können diese Art der Integration in vielen Apps und Szenarien verwenden, wie zum Beispiel:

  • Beschleunigen Sie Serialisierer und Deserialisierer in unserer Django-App
  • Beschleunigen Sie kritische Teile eines Arbeitsablaufs
  • Interaktionen auf niedriger Ebene mit dem Betriebssystem
  • usw.

Und du? Wie werden Sie diesen kleinen Trick in Ihrem Projekt anwenden? Ich würde gerne Ihre Kommentare hören!

Über die Liste

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:

  • Softwarearchitektur
  • Programmierumgebungen
  • Linux-Betriebssystem
  • usw.

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!

Über den Autor

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn