2009-05-11 8 views
6

Wiele bibliotek Pythona, nawet ostatnio napisane, używa httplib2 lub interfejsu gniazda do wykonywania zadań sieciowych.Czy Twisted jest zamiennikiem httplib2/gniazda?

Jest to oczywiście łatwiejsze do kodu niż Twisted ze względu na ich charakter blokujący, ale myślę, że jest to wadą przy integracji z innym kodem, zwłaszcza z GUI. Jeśli chcesz skalowalności, współbieżności lub integracji GUI, unikając wielowątkowości, Twisted jest naturalnym wyborem.

Więc byłbym zainteresowany opinii w tych sprawach:

  1. Jeżeli nowy kod sieci (z wyjątkiem małych narzędzi wiersza poleceń) jest napisane ze skręconymi?
  2. Czy miksowałeś Twisted, http2lib lub kod gniazda w tym samym projekcie?
  3. Czy Twisted pythonic dla większości bibliotek (jest bardziej skomplikowany niż alternatywy, wprowadzić zależność od niestandardowego pakietu ...)?

Edytuj: proszę pozwolić mi wyrazić to w inny sposób. Czy czujesz, że pisanie nowego kodu bibliotecznego z Twisted może dodać barierę do jego przyjęcia? Twisted ma oczywiste zalety (zwłaszcza przenośność i skalowalność, jak podaje gimel), ale fakt, że nie jest to rdzeń biblioteki Pythona, może być uważany przez niektórych za wadę.

Odpowiedz

0
  1. Jeżeli nowy kod sieci (z wyjątkiem małych narzędzi wiersza poleceń) jest napisane ze skręconymi?
    • Może. To naprawdę zależy. Czasami jest to dość łatwe, aby zawijać wywołania blokujące w ich własnym wątku. Skręcenie jest dobre dla kodu sieciowego o dużej skali.
  2. Czy miksowałeś Twisted, http2lib lub kod gniazda w tym samym projekcie?
    • Pewnie. Ale pamiętaj, że Twisted jest pojedynczym gwintem i że każde blokowanie w Twisted zablokuje cały silnik.
  3. Czy Twisted pythonic dla większości bibliotek (jest bardziej skomplikowany niż alternatywy, wprowadzić zależność od niestandardowego pakietu ...)?
    • Jest wielu skręconych fanatyków, którzy powiedzą, że należy do standardowej biblioteki Pythona.Ale wiele osób może wdrożyć przyzwoity kod sieciowy z asyncore/asynchat.
+8

-1. Punkt 1: skręcony jest doskonały dla każdej skali kodu sieciowego, twoje ograniczenie nie ma zastosowania. Kod zawinięty w wątki ma najgorszą wydajność i jest trudny do uzyskania i debugowania. Punkt 2: Nie. Jeśli mam pełen skręcony stos do mojej dyspozycji, dlaczego miałbym używać http2lib lub gniazda? Pont 3: Asyncore/asynchat, poważnie? :( – nosklo

+3

@nosklo: Punkt 1: jesteś typem Twisted Zealot, o którym mówię Nie ma argumentu, że skręcenie jest bardziej skomplikowane Kod zawijany w wątki jest łatwy do uzyskania, jeśli użyjesz kolejki do komunikacji między wyrazami, bardzo wysoko wątpliwość, że wydajność będzie miała znaczenie dla większości aplikacji Punkt 2: Czy myślisz o stworzeniu serwera sieciowego? Nie sądzę, punkt 3: Asyncore/Asynchat poważnie ... Patrz punkt 1. – Unknown

+1

Faceci, YMMV, szczególnie w zależności od twojego doświadczenia z zestaw narzędzi lub inny. Obawiam się, że moje pierwotne pytanie było zbyt subiektywne: Nie jestem tak bardzo zaniepokojony postrzeganą trudnością Twisted (moim problemem jest nauczenie się tego, i myślę, że jest to udokumentowane tak, aby ewentualni opiekunowie tego kodu nie zostaną utracone) niż fakt, że może ograniczyć jego akceptowalność dla innych koderów. – oparisy

5

Zobacz asychronous-programming-in-python-twisted, musisz zdecydować, czy w zależności od niestandardowej (zewnętrznej) biblioteki pasuje do Twoich potrzeb. Zauważ odpowiedź: @Glyph, jest on założycielem projektu Twisted i może autorytatywnie odpowiedzieć na każde pytanie związane z Twisted.

Sednem bibliotek takich jak skręcone funkcji w pętli głównej nie spać, ale wywołanie systemu operacyjnego jak select() lub (ankiety), jak wystawiony przez moduł jak select modułu Pythona. Mówię "jak" wybrać, ponieważ jest to API, które różni się bardzo między platformami i prawie każdy zestaw narzędzi GUI ma swoją własną wersję. Twisted obecnie zapewnia abstrakcyjny interfejs dla 14 różnych odmian tego tematu. Najczęstszą rzeczą, jaką zapewnia takie API, jest sposób na powiedzenie "Oto lista zdarzeń, na które czekam". Idź spać, dopóki jedno z nich się nie wydarzy, a potem obudź się i powiedz mi, który z nich był. "

+0

Twoja odpowiedź jest szczegółowa, ale już wiem (niektóre) Twisted. Interesuje mnie to, jak mogą to postrzegać inni developerzy, a niektórzy mogą zdecydować, że nie będą używać mojej biblioteki, ponieważ zależy to od biblioteki innej niż główna. Wiesz, w ten sam sposób, że niektóre z nich nie będą integrować kodu GPL w swoim źródle ze względu na kompatybilność licencji. – oparisy

+1

Dodatkowe zależności należy zawsze brać pod uwagę. Mam ograniczone doświadczenie, Twisted jest nieco powolny w dogonieniu wersji Pythona, ale całkiem solidny. – gimel

Powiązane problemy