KNOW-HOW - pypassion.com
Transkrypt
KNOW-HOW - pypassion.com
KNOW-HOW IPython Alternatywna powłoka interaktywna Pythona IPython Standardowa powłoka Pythona [1], IDLE, to proste narzędzie pozwalające na interakcję z tym językiem skryptowym tylko w podstawowym zakresie. Znakomitą alternatywą jest IPython [2], która może działać w trybie tekstowym jako aplikacja GUI lub serwer stron internetowych z notatnikami umożliwiającymi: edycję kodu, wstawianie dodatkowego teksu, wyrażeń matematycznych i wykresów oraz wsparcie dla aplikacji równoległych. Instalacja Przed instalacją upewniamy się, że nasz system spełnia wymagania programu IPython: potrzebujemy Pythona w wersji co najmniej 2.6, a także pyzmq (jeżeli chcemy wykorzystać powłokę IPython do obliczeń równoległych), pygments (dla konsoli Qt z kolorowaniem składni) i tornado (do uruchomienia serwera notatników). Aby ułatwić sobie instalację, możemy wykorzystać easy_install: easy_install fejs Qt – ma identyczny zestaw funkcji, jak wersja konsolowa, ale dodatkowo pozwala uruchomić kilka sesji w różnych zakładkach. Możemy przy tym zdecydować, czy nowa zakładka ma być uruchomiona na tym samym, czy na nowym kernelu. Kod wykonywany w różnych zakładkach jest odseparowany i wykonywany niezależnie. Oprócz tego menu Magic zawiera pełną lista dostępnych poleceń magicznych – wystarczy wybrać potrzebne. Program uruchamiamy za pomocą: ipython qtconsole ipython[zmq,qtconsole,notebook,test] Trzy wersje powłoki IPython może działać w trzech trybach. Tryb konsoli (Rysunek 1) pozwala na interaktywną edycję kodu w języku Python, kolorowanie składni, uzupełnianie poleceń (przy pomocy klawisza [Tab]) oraz wydawanie tzw. poleceń magicznych. Program uruchamiamy, pisząc: ipython Drugi tryb IPythona – aplikacja okienkowa (Rysunek 2) wykorzystująca inter- Rysunek 1: IPython w trybie konsoli. 36 WRZESIEŃ 2012 NUMER 103 W trzecim trybie program IPython uruchamiamy jako serwer notatników, które będą dostępne poprzez sieć web. Używamy w tym celu polecenia: Stanisław Topolewicz Explorer 9 i starsze nie wspierają gniazd sieciowych (ang. WebSockets). Niestety, w obecnej wersji (0.13) program nie wspiera żadnego mechanizmu uwierzytelniania. Domyślnie strona umożliwiająca zarządzanie notatnikami oraz klastrami obliczeniowymi (jeżeli IPython służy nam do zarządzania obliczeniami równoległymi) znajduje się pod adresem http://127.0.0.1:8888/ (Rysunek 3). Po kliknięciu New Notebook otwiera się nowa zakładka z nowym notatnikiem (Rysunek 4). IPythona możemy również uruchomić z opcją pylab za pomocą (zależnie od trybu): ipython --pylab=qt ipython qtconsole --pylab ipython notebook --pylab ipython notebook Ten tryb dostępny jest niestety tylko na przeglądarkach Chrome, Safari, Firefox (od wersji 6), a to dlatego, że Internet Wykorzystuje on wówczas dodatkowe biblioteki, takie jak matplotlib, scipy, numpy itp. We wszystkich trzech trybach powłoka IPython jest wygodniejsza i ma znacznie większe możliwości niż IDLE. Uzupełnianie poleceń Rysunek 2: IPython w trybie aplikacji okienkowej (GUI) z opcją pylab. Widoczne jest otwarte okienko z wykresem. W powłoce IPython do uzupełniania poleceń wykorzystujemy klawisz [Tab]. Wpisawszy kilka pierwszych liter danej funkcji i nacisnąwszy klawisz [Tab], otrzymujemy listę pasujących funkcji WWW.LINUX MAGAZINE.PL KNOW-HOW IPython Rysunek 3: IPython w trybie aplikacji web – zarządzanie notatnikami. Rysunek 5: IPython w trybie aplikacji web – lista dostępnych klastrów obliczeniowych. LISTING 1: Test klastra poprzez równoległe wykonywanie funkcji In [1]: from IPython.parallel import Client In [2]: c=Client() c.ids Out [2]: [0,1,2,3] In [3]: c[:].apply_sync(lambda:”Wykonano rownolegle”) Out [3]: [‚Wykonano rownolegle’, ‚Wykonano rownolegle’, Rysunek 4: IPython w trybie aplikacji web – strona z notatnikiem zawierającym tekst i kod w Pythonie. (również funkcji magicznych). A jeżeli dopasowanie jest jednoznaczne, program automatycznie wstawia daną funkcję. Funkcja autouzupełniania działa także w przypadku obiektów – po podaniu jego nazwy i kropki IPython wyświetla listę metod dla danego obiektu. Z autouzupełniania możemy też korzystać dla nazw plików i ścieżek dostępu (Rysunek 6). finiowane wiersze z historii: Polecenia magiczne Obliczenia równoległe Polecenia magiczne (ang. magic functions) to zdefiniowane przez twórców IPythona funkcje, które pozwalają przyspieszyć i ułatwić pracę programisty. Są ich dwa rodzaje: te, które działają w pojedynczym wierszu (rozpoczynają się znakiem %), i te, które wpływają na całą komórkę (rozpoczynają się od %% i oddziałują na kilka kolejnych wierszy). Przykładem może być %timeit wywołane z funkcją range(1000): In[1]: %timeit range(1000) 100000 loops, best of 3: 7.76 us per loop Jego wynikiem jest sprawdzenie czasu wykonywania polecenia następującego po funkcji magicznej %timeit. Historia IPython zapisuje wszystkie wydane polecenia i otrzymane wyniki w historii. Możemy łatwo przejść do poprzednich poleceń przy pomocy strzałek góra / dół lub użyć funkcji magicznej %history, aby wyświetlić całą historię. Istnieje również funkcja magiczna pozwalająca wkleić zde- WWW.LINUX MAGAZINE.PL %pastebin 7 20-25 ~1/3-9 W ten sposób wstawiamy wiersze od dwudziestego do dwudziestego piątego i wiersz siódmy z aktualnej sesji oraz wiersze od trzeciego do dziewiątego z sesji poprzedniej. IPython umożliwia również zarządzanie obliczeniami równoległymi. Otworzywszy stronę zarządzającą notatnikami, wybieramy zakładkę Clusters. Znajduje się tutaj lista zdefiniowanych wcześniej klastrów obliczeniowych (w pliku IPYTHON_DIR/ profile_nazwa profilu/*_config.py, gdzie * oznacza jeden ze sposobów uruchamiania programu równoległego: ipcluster to automatyczny, a ipcontroller i ipengine pozwala uruchomić osobno kontroler i silniki obliczeniowe). Początkowo dostępny jest tylko klaster default (Rysunek 5) złożony z procesorów komputera, na którym uruchomiony jest IPython. Możemy ustawić liczbę silników (ang. engines) - parametr ten odpowiada za liczbę równolegle wykonywanych wątków – najlepiej, gdy jest ona równa sumarycznej liczbie rdzeni dostępnych w klastrze. Teraz możemy uruchomić nowy notatnik i cieszyć się prostym interfejsem IPythona. Na Listingu 1 znajduje się przykładowy test równoległego wykonywania funkcji. Widzimy, że uruchomiony klaster zawiera cztery silniki (metoda ids zwraca ‚Wykonano rownolegle’, ‚Wykonano rownolegle’] listę indeksów silników), co oczywiście nie musi odpowiadać fizycznej liczbie procesorów w klastrze. Metoda apply_ sync, działająca na wszystkich węzłach klastra, wykonuje funkcję podaną jako argument na poszczególnych węzłach, a następnie scala wyniki otrzymane z poszczególnych silników. Mechanizm wykonywania obliczeń równoległych przy pomocy IPythona jest dość dokładnie przedstawiony w dokumentacji. Podsumowanie Niewątpliwie IPython sprawdza się znakomicie jako alternatywna powłoka interaktywna dla języka Python. Oferuje wiele zaawansowanych funkcji, umożliwia integrację bibliotek matplotlib do rysowania wykresów oraz scipy i numpy – do obliczeń. Ponadto, jeżeli zależy nam na obliczeniach równoległych w Pythonie, możliwość zdefiniowania własnego klastra obliczeniowego i przeniesienie większości zadań (na przykład przesyłania informacji i synchronizacji danych między wątkami) na IPythona pozwala skoncentrować się na rozwiązywaniu problemu. n n n INFO [1] Python: http://python.org/ [2] IPython: http://ipython.org/ [3] Matplotlib: http://matplotlib.sourceforge.net/ [4] Dokumentacja: http://ipython.org/ ipython-doc/stable/index.html NUMER 103 WRZESIEŃ 2012 37