Distributed wget - projekt semestralny
04 lipca 2009, 14:46:47Końcówka maja była dość wyczerpująca - zakończenie semestru, a zgodnie z regulaminem elki oznacza zaliczenie wszystkich przedmiotów nieegzaminacyjnych, czyli takich, które zamiast egzaminem, kończą się kolokwium na ostatnim wykładzie :>.
Noce upływały nam (mi oraz Tomkowi, Pawłowi i Łukaszowi) na wesołym kodowaniu w Pythonie oraz spożywaniu napojów energetycznych. Powstał dwget, rozproszony wget. Program jest realizacją zadania drugiego, z nieznacznymi modyfikacjami.
Idea projektu polega na kilku węzłach podrzędych, które ściągają fragmenty pliku, i węźle nadrzędnym, który koordynuje zadania i nawiązuje interakcję z użytkownikiem. Sens takiego sposobu pobierania pliku jest cokolwiek wątpliwy, poprawa szybkości będzie miała miejsce jedynie w dość rzadkim przypadku: węzły podrzędne muszą mieć niezależne łącza do Internetu oraz szybkie łącze wewnętrzne do przesyłania pobranego fragmentu do węzła nadrzędnego.
Był to dla nas pierwszy większy kawałek kodu pisany w Pythonie, więc z pewnością jest bardzo niedoskonały :). W związku z tym, że program korzysta z dość pokaźnej liczby wątków (oddzielny wątek dla każdej komunikacji), architektura jest głównie zdarzeniowa, stąd szerokie wykorzystanie PyDispatchera. Brak doświadczenia w Pythonie zaowocował też niepotrzebną stratą czasu i nerwów na napisanie synchronizowanej kolejki zadań na eventach (robi dokładnie to, co standardowa queue).
Istnieje też interfejs www napisany w Django, ale w obecnej wersji coś się skaszaniło ze ścieżkami w szablonie i nie ma grafik oraz css, może to poprawimy niedługo.
Całość można pobrać z repozytorium na githubie, instrukcja użycia jest na tamtejszym wiki.