2009-05-11 9 views
6

Molte librerie Python, anche se di recente scritte, usano httplib2 o l'interfaccia socket per eseguire attività di rete.Twisted è una sostituzione di httplib2/socket?

Questi sono ovviamente più facili da codificare rispetto a Twisted a causa della loro natura di blocco, ma penso che questo sia un inconveniente quando li si integra con un altro codice, specialmente quello con interfaccia grafica. Se si desidera la scalabilità, la concorrenza o l'integrazione della GUI evitando il multithreading, Twisted è quindi una scelta naturale.

Quindi sarei interessato a pareri in quelle materie:

  1. caso nuovo codice di rete (con l'eccezione di piccoli utensili da riga di comando) essere scritto con Twisted?
  2. Vuoi mescolare Twisted, http2lib o codice socket nello stesso progetto?
  3. Twisted pythonic per la maggior parte delle librerie (è più complesso delle alternative, introduce una dipendenza da un pacchetto non standard ...)?

Modifica: per favore lasciatemi esprimere questo in un altro modo. Ti senti scrivere un nuovo codice di libreria con Twisted potrebbe aggiungere un ostacolo alla sua adozione? Twisted ha vantaggi evidenti (in particolare portabilità e scalabilità come dichiarato da gimel), ma il fatto che non sia una libreria core python può essere considerato da alcuni come un inconveniente.

risposta

0
  1. caso nuovo codice di rete (con l'eccezione di piccoli utensili da riga di comando) essere scritto con Twisted?
    • Forse. Dipende davvero. A volte è abbastanza semplice da avvolgere le chiamate di blocco nella loro stessa discussione. Twisted va bene per il codice di rete su larga scala.
  2. Vuoi mescolare il codice Twisted, http2lib o socket nello stesso progetto?
    • Sicuro. Ricorda però che Twisted è single threaded e che qualsiasi chiamata bloccante in Twisted bloccherà l'intero motore.
  3. Twisted pythonic per la maggior parte delle librerie (è più complesso delle alternative, introduce una dipendenza da un pacchetto non standard ...)?
    • Ci sono molti fanatici Twisted che diranno che appartiene alla libreria standard Python.Ma molte persone possono implementare un codice di rete decente con asyncore/asynchat.
+8

-1. Punto 1: twistato è ottimo per qualsiasi scala del codice di rete, la restrizione non si applica. Il codice con il thread inserito ha le peggiori prestazioni ed è difficile eseguirlo correttamente e eseguire il debug. Punto 2: No. Se ho l'intero stack contorto a mia disposizione, perché dovrei usare http2lib o socket? Pont 3: Asyncore/asynchat, sul serio? :( – nosklo

+3

@nosklo: Punto 1: tu sei il tipo di Twisted Zealot di cui sto parlando Non si può sostenere che il twist sia più complesso. Il codice thread-wrapped è facile da ottenere correttamente se si usa Queue per la comunicazione interthread Dubbio che le prestazioni contano per la maggior parte delle applicazioni Punto 2: Stai pensando di creare un server web? Io non penso Punto 3: Asyncore/Asynchat seriamente ... Vedi il punto 1. – Unknown

+1

Ragazzi, YMMV, specialmente in base alla tua esperienza con Ho paura che la mia domanda iniziale fosse troppo soggettiva Io non sono così preoccupato per la difficoltà percepita di Twisted (è un mio problema apprenderlo, e penso che sia documentato in modo tale che i possibili manutentori di questo codice non andrà perso) che dal fatto che potrebbe limitare la sua accettabilità ad altri codificatori – oparisy

5

Vedere asychronous-programming-in-python-twisted, è necessario decidere se in base a una libreria non standard (esterna) adatta alle proprie esigenze. Notare la risposta con @Glyph, è il fondatore del progetto Twisted e può rispondere in modo autorevole a qualsiasi domanda relativa a Twisted.

Al centro di librerie come Twisted, la funzione nel ciclo principale non è sleep, ma una chiamata al sistema operativo come select() o poll(), come esposta da un modulo come il modulo di selezione Python. Dico "like" select, perché si tratta di un'API che varia molto tra le piattaforme e quasi ogni toolkit GUI ha una sua versione. Twisted fornisce attualmente un'interfaccia astratta a 14 diverse varianti su questo tema. La cosa comune che questa API fornisce è un modo per dire "Ecco una lista di eventi che sto aspettando. Vai a dormire fino a quando uno di loro accade, poi svegliati e dimmi quale di questi è stato. "

+0

La tua risposta è dettagliata ma so già (alcuni di) Twisted. Quello che mi interessa qui è il modo in cui gli altri sviluppatori possono percepirlo, e se alcuni possono scegliere di non usare la mia libreria perché dipende da una libreria non core. Sai, nello stesso modo in cui alcuni di loro non integreranno il codice GPL nella loro fonte per motivi di compatibilità delle licenze. – oparisy

+1

Le dipendenze aggiuntive devono essere sempre considerate con attenzione. La mia esperienza limitata, Twisted è un po 'lento nel recuperare le versioni di Python, ma abbastanza solido. – gimel