2012-12-21 15 views
5

Chcę utworzyć rozszerzenie Pythona i bardzo podoba mi się pomysł użycia Cythona. Głównie, aby zdobyć więcej wiedzy na ten temat i skorzystać z zysków prędkości, jeśli w ogóle. Czytałem sporo dokumentacji w języku Cython, ale nie jestem naukowcem komputerowym (jeszcze) i nie mam dogłębnej wiedzy, aby zrozumieć podstawy niskiego poziomu, stąd powód moich następujących pytań:Co robi Cython z importem?

Byłem Zastanawiam się, co się stanie, jeśli użyję zewnętrznego importu (na przykład biblioteki ORM lub SQL lub jakiejkolwiek innej biblioteki trzeciej) do rozwijanego przeze mnie rozszerzenia Python?

Jak radzi sobie z tym Cython?

Czy istnieje różnica, czy ta zaimportowana biblioteka/rozszerzenie jest w czystym Pythonie, czy też jest skompilowana?

Jaki jest właściwy sposób postępowania z tym?

Dziękuję.

PS. Pytania są pogrubione.

Odpowiedz

5

Celem cython jest być kompatybilny z Pythona, tj. Że można cytonizować dowolny kod Pythona i będzie działać jak poprzednio. Obecnie duża część kodu Pythona już działa. Cython umożliwia ponadto optymalizację części kodu i skompilowanie go do bardziej wydajnego kodu C.

W związku z tym wszelkie importowanie pythonu pozostanie domyślnie. Wszelkie połączenia z nimi będą wydawane jako polecenia Pythona. Nawet jeśli moduł jest zapisany w C, cython pobierze objazd przez pythona, aby wywołać funkcje modułu. Jeśli chcesz użyć biblioteki C bezpośrednio, musisz mieć dla nich powiązania z cytonami. cython documentation explains how to do this.

Generalnie python działa jako nadzorca i obsługuje zakresy modułów/klas. Jeśli kod w jednym module wywoła dowolną funkcję Pythona (lub uzyska dostęp do zmiennej Pythona), Python rozwiąże połączenie zgodnie z zakresem wywołującego. Jeśli wywołana funkcja znajduje się w drugim module, python z przyjemnością go używa. Dzwoniący po prostu otrzyma wynik i nie powinien się tym przejmować, czy druga funkcja była w innym module, czy nie. Kluczem są zatem reguły określające zasięg pythona, które decydują, która funkcja jest wywoływana.