Ctypes pro und con

7

Ich habe gehört, dass Ctypes in Python und Windows Abstürze verursachen (oder Fehler stoppen) können. Sollte ich mich von ihrem Gebrauch fernhalten? Wo habe ich gehört? Es war zurück, als ich versuchte, verschiedene Aspekte von Windows, Automatisierung, so etwas zu kontrollieren.

Ich höre vom Schluck, aber ich sehe Ctypes öfter als nicht. Irgendeine Gefahr hier? Wenn ja, worauf sollte ich achten?

Ich habe nach ctype pro con python gesucht.

    
phreaki 23.08.2009, 14:45
quelle

4 Antworten

13

In puncto Robustheit denke ich immer noch, dass swig ctypes etwas überlegen ist, weil es möglich ist, dass ein C-Compiler die Dinge gründlicher prüft; Dies ist jedoch mittlerweile ziemlich umstritten (während es in früheren Ctypes Versons größer war), dank des bereits erwähnten argtypes -Features @Mark. Es gibt jedoch keinen Zweifel, dass der Laufzeit-Overhead für ctypes viel bedeutender ist als für swig (und sip and boost python und andere "wrapping" -Ansätze): also halte ich ctypes für einen bequemen Weg, um einige Funktionen zu erreichen eine DLL, wenn die Aufrufe außerhalb eines Schlüsselengpasses stattfinden, nicht als eine Möglichkeit, in Performance-kritischen Situationen große C-Bibliotheken für Python verfügbar zu machen.

Für einen schönen Mittelweg zwischen der Laufzeitleistung von swig (& amp; c) und dem Komfort von ctypes, mit dem zusätzlichen Vorteil, in der Lage zu sein, mehr Code hinzuzufügen, der eine Teilmenge der Python-Syntax verwenden kann und dennoch bei etwa C läuft -Code-Geschwindigkeiten, auch Cython - eine Python-ähnliche Sprache, die bis C kompiliert und ist spezialisiert für das Schreiben von Python-aufrufbaren Erweiterungen und das Umwickeln von C Bibliotheken (einschließlich solcher, die nur als statische Bibliotheken verfügbar sind, nicht DLLs: ctypes lässt Sie nicht mit diesen spielen; -).

    
Alex Martelli 23.08.2009, 18:00
quelle
5

ctypes ist ein sicheres Modul, wenn Sie es richtig verwenden.

Einige Bibliotheken bieten einen Zugang zu den Dingen auf niedrigerer Ebene, einige Module erlauben Ihnen einfach, sich in den Fuß zu schießen. Natürlich sind manche Module gefährlicher als andere. Dies bedeutet nicht, dass Sie sie nicht verwenden sollten!

Sie haben wahrscheinlich jemanden gehört, der sich auf so etwas bezieht:

%Vor%

Der Absturz des Python-Interpreters ist anders als nur der Python-Code selbst, der mit einem Laufzeitfehler ausfällt. Zum Beispiel würde eine unendliche Rekursion mit einem Standard-Rekursionsbegrenzungssatz einen Laufzeitfehler verursachen, aber der Python-Interpreter wäre danach noch am Leben.

Ein weiteres gutes Beispiel ist das sys-Modul. Sie würden jedoch nicht aufhören, das sys-Modul zu benutzen, weil es den Python-Interpreter zum Absturz bringen kann.

%Vor%

Es gibt auch viele Bibliotheken, die Zugriff auf niedrigere Ebenen bieten. Zum Beispiel kann das Modul "gc" manipuliert werden, um Zugriff auf ein teilweise konstruiertes Objekt zu geben, dessen Zugriff auf Felder Abstürze verursachen kann.

Referenz und Ideen stammen aus: Python abstürzen

    
Brian R. Bondy 23.08.2009 14:47
quelle
3

ctypes kann tatsächlich zu Abstürzen führen, wenn die verwendete C-Bibliothek bereits Abstürze verursachen kann.

Wenn überhaupt, kann ctypes helfen, Abstürze zu reduzieren, da Sie die Sicherheit für den Runtime-Typ mit die Eigenschaft argtypes für C-Funktionen mit ctypes .

Aber wenn Ihre C-Bibliothek bereits stabil und getestet ist, gibt es absolut keinen Grund, ctypes nicht zu verwenden, wenn sie das liefert, was Sie brauchen, um C und Python zusammenzubringen.

    
Mark Rushakoff 23.08.2009 14:58
quelle
2

Ich schlage vor, dass Sie beim Lesen dieses Buches nachsehen:

Grey Hat Python: Python-Programmierung für Hacker und Reverse Engineers

Das Buch dient als ausführliches Tutorial für die Ctypes-Bibliothek und zeigt Ihnen, wie Sie unglaublich niedrigen Code ausführen können

    
Kenneth Reitz 23.08.2009 21:38
quelle

Tags und Links