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