AppEngine i Pylons

Wszyscy piszą o Google AppEngine więc ja też coś napiszę. Żeby nie było tylko Django i Django zawiadamiam, że trwają prace nad uruchomieniem Pylonsa na Google’u.

Najwięcej kłopotów było z faktem, że na AppEngine nie można instalować bibliotek używających C. Okazuje się, że Mako i SQLAlchemy są takowymi. O ile SQLALchemy nie jest może w tym przypadku istotne o tyle Mako by się przydało.

Jak można było się spodziewać, na developerów Pylonsa można liczyć. Trunk Mako można już instalować na AppEngine a Beaker może pracować z Googlowym silnikiem baz danych.

Ian Bicking wypuścił pakiet umożliwiający zbudowanie środowiska do AppEngine.

Więcej informacji w poście:

http://groups.google.pl/group/pylons-discuss/browse_thread/thread/3f132217b134b772

Instrukcja jak zrobić i zainstalować na AppEngine aplikację w Pylonsie:

http://code.google.com/p/appengine-monkey/wiki/Pylons

Posted by Climbus Mon, 14 Apr 2008 18:33:00 GMT


W pogoni za wersjami

Frameworki, szczególnie w językach dynamicznych bardzo szybko się rozwijają. Powstaje wersja za wersją. Przy większej liczbie aplikacji może to być uciążliwe.

Aplikacje pisane pół roku temu są kompatybilne z wersją 0.x frameworka, po drodze były wersje 0.x.y, 0.y a teraz jest wersja 0.z. Czy tkwić z jedną ustaloną jako produkcyjna wersją czy używać do nowych projektów aktualnie najnowszej. Przecież na serwerze jest zainstalowana wersja 0.x i nie ma szans na podniesienie i sprawdzenie wszystkich aplikacji.

W rozwiązaniu tego dylematu pomógł pakiet “virtualenv”. Za jego pomocą szybko zrobimy wirtualne środowisko pythona.

Może przykład z Pylonsem: na serwerze jest zainstalowana wersja 0.9.5 a najnowszą wersją jest 0.9.6, która ma sporo zmian.

Więc instalujemy pakiet virtualenv:

easy_install virtualenv

Robimy środowisko:

virtualenv 096

Powstał nowy katalog “096” z binarką pythona. Instalujemy nową wersję Pylonsa:

cd 096
./bin/easy_install Pylons==0.9.6

Wgrywamy naszą aplikację do jakiegoś podkatalogu np. Aplikacja i uruchamiamy:

cd Aplikacja
../bin/paster serve production.ini --daemon start

I gotowe. Możemy sobie dograć niezbędne wersje bibliotek. Trzeba pamiętać aby używać skryptów jawnie podając katalog 096/bin.

Posted by Climbus Fri, 28 Mar 2008 07:13:00 GMT


Co robią moje wątki?

Paster dostarcza wiele przydatnych aplikacji. Jedna z nich nazywa się watch_threads i służy do podglądania stanu wątków pastera.

Widzimy ile wątków jest w puli, ile aktualnie jest używanych, czy są jakieś zablokowane. Jest też lista wątków aktualnie przetwarzanych oraz kilka szczegółów np. czas wykonania. Możemy zabijać zablokowane wątki.

Instalacja jest prosta. Jest to aplikacja wsgi więc można wpiąć ją pod url do pastera. Wystarczy zmienić domyślne sekcje w pliku .ini:

[composite:main]
use = egg:Paste#urlmap
/ = mainapp
/monitor = monitor

[app:monitor]
use = egg:Paste#watch_threads
allow_kill = True

[app:mainapp]
...

Po restarcie pod adresem: /monitor mamy listę aktualnie używanych wątków.

Thread monitor

Posted by Climbus Wed, 12 Mar 2008 19:15:00 GMT


Paster na kilka procesów

Po przeczytaniu paru artykułów o GIL postanowiłem spróbować rozdzielić paster’a na kilka procesów.

Domyślnie Pylons rusza w trybie z pulą 10 wątków. Liczbę wątków można zmienić w production.ini umieszczając w sekcji server:main poniższe:

use_threadpool = True
threadpool_workers = 20

Ale czy 20 wątków i więcej będą optymalnie wykorzystywały wieloprocesorową maszynę? Może lepszym wyjściem jest powielanie procesów a nie wątków.

Aby uruchomić aplikację na kilku procesach można zrobić kilka sekcji server:

[server:main]
use  = egg:paste#http
host = 0.0.0.0
port = 5000
use_threadpool = True
threadpool_workers = 10

[server:main2]
use  = egg:paste#http
host = 0.0.0.0
port = 5001
use_threadpool = True
threadpool_workers = 10

Teraz aby wystartować robimy:

paster serve production.ini --server-name=main --pid-file=main.pid --log-file=main.log --daemon start 
paster serve production.ini --server-name=main2 --pid-file=main2.pid --log-file=main2.log --daemon start

I mamy kilka procesów. Teraz wystarczy napisać kawałek skryptu startującego, ustawić loadbalancer i testować.

Posted by Climbus Mon, 10 Mar 2008 19:12:00 GMT


gigabajtosekunda

Po ostatniej, fajnej dyskusji na pl.comp.lang.python postanowiłem sprawdzić co mi Rails powie.

I tak:

1.day * 1.gigabyte => 92771293593600

Nowa jednostka? sekundobajt:

1.second * 1.byte: => 1

To jest dobre:

1.gigabyte.ago => Wed Feb 27 06:08:25 +0100 1974

W sam raz do nowego Startreka: “W dawnych czasach. Cały gigabajt temu. Kiedy jeszcze ludzie mierzyli czas w prymitywnych sekundach” :)

Następny wpis będzie 512.kilobytes.from_now

=> Thu Mar 13 21:32:10 +0100 2008

Posted by Climbus Fri, 07 Mar 2008 18:43:00 GMT


Older posts: 1 2 3 4