CPython

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ich habe immer wieder von einer Verbindung zwischen C und Python gehört. Aber wie kann man sich das vorstellen? Geschwindigkeitskritische Teile werden mit C geschrieben, der Rest in Python? Wo gibt es gute Tutorials zu dem Thema?
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Xfd7887a: Anstatt sich selber mit der C-API von Python zu beschäftigen sollte man zuerst schauen, ob man den Algorithmus in Python verbessern kann durch geschicktes Umstrukturieren des Python-Codes. Für viele mathematiklastige Anwendungsfälle eignen sich außerdem Bibliotheken wie Numpy und SciPy. Zudem gibt es mit PyPy einen alternativen Interpreter zu CPython, der in vielen Fällen zu Geschwindigkeitszuwächsen bei der Codeausführung führt. Nicht zu vergessen noch Cython, welches eine Art Python mit C-artigen Typedeklarationen darstellt und den damit geschriebenen Python-Code zu C-Code kompiliert, wodurch einem die händische Erstellung abgenommen wird. Erst wenn das alles nicht geeignet erscheint, würde ich mich ernsthaft mit der C-API auseinandersetzen. Ansonsten überwiegen nämlich IMHO eher die Nachteile bezüglich Wartbarkeit, Fehleranfälligkeit und Zeit, die man zur Erstellung von händisch erstelltem C-API Code benötigt. Vielleicht willst du ja mal nach den Stichwörtern, die ich genannt hatte, recherchieren um dir ein Bild von den vielfältigen Möglichkeiten machen zu können...
BlackJack

Ergänzenz dazu würde ich auch das `ctypes`-Modul in der Standardbibliothek vorher noch ins Auge fassen bevor ich tatsächlich händisch Code gegen die Python C-API schreiben würde.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Naja, mir wurde jetzt empfohlen C zu lernen und ich dachte, dass könne man mit Python verbinden. Aber so einfach scheint das nicht zu sein.
BlackJack

@Xfd7887a: Doch C kann man mit Python ganz gut und eigentlich auch einfach verbinden — vorausgesetzt man kann Python und C.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Und wo findet man Tutorials dazu?
BlackJack

@Xfd7887a: Zu Python? Zu C? Zu `ctypes`? Zur CPython C-API? Zu Cython? Zu Numpy? Also ausser zu C haben alle anderen genannten eines in der jeweiligen Dokumentation oder zumindest dort verlinkt. Und C ist eine sehr alte Sprache die immer noch ziemlich aktiv verwendet wird. Da findet man sicher mehr Material als man im Leben verarbeiten kann.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

In Verbindung mit der C-API die Sprache C zu lernen, ist zwar eine nette Idee, könnte einen Anfänger aber vor größere Hürden stellen. Ich würde empfehlen, sich erstmal ein paar Grundlagen in C an sich anzueignen und dann eher mit der GLib als Framework zu beginnen, um erste brauchbare Programme zu schreiben. Wenn man dann Bock hat, kann man sich immer noch mit so tollen Dingen wie dem Erstellen von Erweiterungsmodulen für Python mittels der C-API, dem ordentlichen Zusammenspiel mit Pythons Referenzverwaltung und ähnlichen Gemeinheiten befassen... :twisted:
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Xfd7887a:
Wenn Du jetzt C lernen willst nur um eine weitere Sprache zu nutzen und die Einsatzszenarien nicht abschätzen kannst, ist es vllt. nicht das Richtige für Dich.

Am unkompliziertesten ist IMHO die Nutzung von ctypes. Wenn man den C-Teil schon vorliegen hat, ist damit der Python-C Brückenschlag ein no-brainer. Alles was Du dafür brauchst, steht in der ctypes Dokumentation (https://docs.python.org/2/library/ctypes.html).
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Xfd7887a hat geschrieben:Ich habe immer wieder von einer Verbindung zwischen C und Python gehört. Aber wie kann man sich das vorstellen? Geschwindigkeitskritische Teile werden mit C geschrieben, der Rest in Python?
Im Prinzip ja.
Es gibt aber auch andere Gründe um aufzuteilen:

Testing
Wenn Du Deine C-Funktionen in Python zugänglich machst (z.B. mit Swig gewrappt hast), dann kannst Du sie interaktiv ausprobieren und kannst Deine Testfälle in Python entwickeln.

Flexibilität
Du schreibst kein C-Programm mehr, sondern nur eine C-Bibliothek. Das was üblicherweise in der main-Funktion passiert, das Erzeugen der Top-Level Objekte (OK ist C++, aber in C wird es was entsprechendes geben), das machst Du in Python. Je nachdem wie Du das Programm brauchst, kannst Du diese Top-Level-Objekte im Python Start-Script unterschiedlich zusammensetzen.

Ini-File-Parser
Anstatt in C einen Ini-File-Parser zu entwickeln, schreibst Du Deine Ini-Parameter direkt ins Python-Skript rein oder liest sie mit Python ein. Wenn Du dann auf einmal merkst, da wiederholt sich was in Deinen Ini-Dateien, dann schreibst Du einfach eine Python-Schleife, anstatt selbst eine Schleifensyntax in Deinem Ini-File-Format zu definieren.

Bevor Du aber sowas machst, solltest Du C aber schon können.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten