Kerangka kerja / perpustakaan mana yang akan menjadi pilihan terbaik untuk membangun aplikasi web multiuser modern? Saya ingin memiliki server web yang tidak sinkron yang memungkinkan saya untuk mengukur dengan mudah. Solusi apa yang akan memberikan kinerja terbaik / skalabilitas / kerangka kerja paling berguna (dalam hal mudah digunakan dan mudah dikembangkan)?
Akan sangat bagus jika itu akan memberikan fungsionalitas yang baik (soket web, rpc, streaming, dll).
Apa pro dan kontra dari setiap solusi?
Jawaban:
" Django adalah kerangka kerja Python Web tingkat tinggi yang mendorong pengembangan cepat dan desain pragmatis yang bersih" . Jika Anda sedang membangun sesuatu yang mirip dengan situs e-commerce, maka Anda mungkin harus pergi dengan Django. Ini akan menyelesaikan pekerjaan Anda dengan cepat. Anda tidak perlu khawatir tentang terlalu banyak pilihan teknologi. Ini memberikan semua hal yang Anda butuhkan dari mesin template ke ORM. Akan ada sedikit pendapat tentang cara Anda menyusun aplikasi, yang bagus Jika Anda bertanya kepada saya. Dan itu memiliki komunitas terkuat dari semua perpustakaan lain, yang berarti bantuan mudah tersedia.
" Flask adalah mikro untuk Python berdasarkan Werkzeug, Jinja 2 dan niat baik" . Waspadalah - "mikroframework" mungkin menyesatkan. Ini tidak berarti bahwa Flask adalah perpustakaan yang setengah matang. Ini berarti inti labu sangat, sangat sederhana. Tidak seperti Django, Itu tidak akan membuat keputusan Teknologi untuk Anda. Anda bebas memilih mesin template atau ORM apa pun yang Anda sukai. Meskipun dilengkapi dengan mesin template Jinja secara default, Anda selalu bebas memilih sendiri. Sejauh yang saya tahu Flask berguna untuk menulis titik akhir API (layanan tenang).
" Twisted adalah mesin jaringan yang dikendalikan oleh peristiwa yang ditulis dengan python" . Ini adalah mesin performa tinggi. Alasan utama kecepatannya adalah sesuatu yang disebut ditangguhkan. Twisted dibangun di atas tangguhan. Bagi Anda yang tidak tahu tentang ditunda, itu adalah mekanisme melalui arsitektur asinkron tercapai. Memutar sangat cepat. Tetapi tidak cocok untuk menulis webapps konvensional. Jika Anda ingin melakukan hal-hal jaringan tingkat rendah, twisted adalah teman Anda.
" Tornado adalah kerangka kerja web Python dan pustaka jaringan asinkron, yang awalnya dikembangkan di FriendFeed. Dengan menggunakan jaringan non-pemblokiran I / O, Tornado dapat menskalakan hingga puluhan ribu koneksi terbuka, menjadikannya ideal untuk pemungutan suara panjang, WebSockets, dan aplikasi lainnya yang membutuhkan koneksi berumur panjang untuk setiap pengguna " . Tornado berdiri di suatu tempat antara Django dan Flask. Jika Anda ingin menulis sesuatu dengan Django atau Flask, tetapi jika Anda membutuhkan kinerja yang lebih baik, Anda dapat memilih Tornado. itu dapat menangani masalah C10k dengan sangat baik jika dirancang dengan benar.
" Cyclone adalah kerangka kerja server web untuk Python yang mengimplementasikan Tornado API sebagai protokol Twisted" . Sekarang, bagaimana jika Anda menginginkan sesuatu yang hampir sama berkinerja seperti Twisted tetapi mudah untuk menulis webapp konvensional? Katakan halo kepada topan. Saya lebih suka Topan daripada Tornado. Ini memiliki API yang sangat mirip dengan Tornado. Sebenarnya, ini adalah garpu Tornado. Tapi masalahnya adalah komunitasnya relatif kecil. Alexandre Fiori adalah satu-satunya pengawas utama untuk repo tersebut.
" Pyramid adalah kerangka kerja pengembangan aplikasi web Python yang umum dan open source. Tujuan utamanya adalah untuk membuatnya lebih mudah bagi pengembang Python untuk membuat aplikasi web." Saya belum benar-benar menggunakan Piramida, tetapi saya membaca dokumentasi. Dari apa yang saya mengerti, Piramida sangat mirip dengan Flask dan saya pikir Anda dapat menggunakan Piramida di mana pun Flask tampaknya tepat dan sebaliknya.
SUNTING : Permintaan untuk meninjau kerangka kerja lain disambut!
Sumber: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
sumber
Ini jelas merupakan jawaban yang agak bias , tetapi itu tidak sama dengan jawaban yang salah ; Anda harus selalu menggunakan Twisted. Saya telah menjawab pertanyaan serupa sebelumnya, tetapi karena pertanyaan Anda tidak persis sama, berikut adalah beberapa alasan:
"Performa terbaik"
Twisted terus memantau kinerja kami di situs web speed.twistedmatrix.com . Kami juga salah satu proyek pertama yang dipantau oleh situs serupa PyPy , dengan demikian memastikan kinerja Twisted yang baik pada runtime yang ada yang peduli dengan aplikasi berkinerja tinggi di Python.
"Skalabilitas"
Sepengetahuan saya, tidak ada kerangka kerja yang terdaftar yang memiliki dukungan bawaan untuk penskalaan otomatis; semuanya adalah kerangka komunikasi, jadi Anda harus melakukan pekerjaan untuk berkomunikasi di antara titik skala Anda. Namun, Twisted memiliki keunggulan dalam dukungan bawaannya untuk multi-pemrosesan lokal . Dalam keadilan, ada add-on pihak ketiga untuk Tornado yang memungkinkan Anda untuk melakukan hal yang sama. Dalam rilis terbaru, Twisted telah menambahkan fitur yang meningkatkan jumlah cara Anda dapat berbagi pekerjaan di antara inti, dan pekerjaan sedang berlangsung di area itu. Bengkok juga memiliki beberapa yang terintegrasi dengan baik , "pribumi" RPC protokol yang menawarkan konstruksi-kit untuk idiom skala apa pun yang Anda ingin mengejar.
"Sangat berguna"
Banyak orang yang menganggap Twisted sangat berguna . Sedemikian rupa sehingga banyak dari mereka telah memperpanjangnya dan membuat ekstensi mereka tersedia untuk Anda.
"Kegunaan"
Di luar kotak, Twisted mencakup:
Di departemen terakhir ini, setidaknya, Twisted tampaknya merupakan pemenang yang jelas untuk fungsionalitas bawaan. Dan semua ini, dalam satu paket lebih dari 2 megabita!
sumber
spawnProcess
, penjadwalan I / O ini dapat diterjemahkan ke dalam penjadwalan CPU juga.Saya suka respons @Glyph. Twisted sangat komprehensif, kerangka python kaya. Twisted dan Tornado memiliki desain yang sangat mirip. Dan saya sangat menyukai desain ini:
Tapi saya ingin menyoroti Tornado , yang saya sukai dan baru-baru ini mendapatkan popularitas. Tornado, seperti Twisted, menggunakan pemrograman gaya panggilan balik, tetapi dapat digarisbawahi menggunakan
tornado.gen.engine
(twisted.internet.inlineCallbacks
dalam Twisted).Basis kode
Komentar terbaik adalah dari situs http://cyclone.io . cyclone mencoba mencampur Twisted dan Tornado karena:
Tetapi pada 2011
tornado.platform.twisted
keluar yang membawa fungsionalitas serupa.Performa
Tornado memiliki kinerja yang jauh lebih baik . Ini juga berfungsi mulus dengan PyPy, dan mendapatkan keuntungan besar.
Skalabilitas
Sama seperti Twisted. Tornado telah
tornado.process
dan banyak layanan rpc diimplementasikan di atasnya.Kegunaan
Ada 71 paket berbasis Tornado, dibandingkan dengan 148 Twisted dan 48 Gevent. Tetapi jika Anda melihat dengan cermat dan menghitung median waktu unggah paket, Anda akan melihat bahwa Twisted adalah yang tertua, lalu Gevent dan Tornado yang paling baru. Selain itu ada
tornado.platform.twisted
modul yang memungkinkan Anda untuk menjalankan kode yang ditulis untuk Twisted on Tornado .Ringkasan
Dengan Tornado Anda dapat menggunakan kode dari Twisted. Tidak perlu menggunakan topan yang hanya memutar kode Anda (kode Anda menjadi lebih berantakan).
Sedangkan untuk 2014, Tornado dianggap sebagai kerangka kerja async yang diterima secara luas dan standar yang berfungsi baik pada python2 dan python3. Juga versi terbaru 4.x menghadirkan banyak fungsionalitas dari https://docs.python.org/dev/library/asyncio.html .
Saya menulis sebuah artikel, menjelaskan mengapa saya menganggap bahwa Tornado - kerangka kerja web Python terbaik di mana saya menulis lebih banyak tentang fungsi Tornado.
sumber
( PEMBARUAN : Saya sangat terkejut tentang betapa sedikit jawaban di sini yang merekomendasikan atau bahkan menyebut Gevent — saya pikir itu tidak sebanding dengan popularitas, kinerja, dan kemudahan penggunaan perpustakaan yang luar biasa ini!)
Gevent dan Twisted tidak saling eksklusif, meskipun sebaliknya mungkin tampak jelas pada awalnya. Ada sebuah proyek yang disebut
geventreactor
yang memungkinkan seseorang untuk secara relatif lancar memanfaatkan yang terbaik dari kedua dunia, yaitu:inlineCallbacks
tidak sanggup melakukan pekerjaan dalam hal kinerja ketika menyangkut banyak coroutine, dan tidak juga di ketentuan kemudahan / transparansi penggunaan:yield
dan diDeferreds
mana - mana; seringkali sulit untuk membangun beberapa abstraksi; jejak tumpukan yang sangat tidak berguna dengan telanjangDeferred
dan juga, dan bahkan lebih lagi dengan@inlineCallbacks
.IReactorProcess.spawnProcess
.Saya pribadi saat ini menggunakan Gevent 1.0rc2 dengan Twisted 12.3 yang dijembatani oleh
geventreactor
. Saya telah mengimplementasikan penambahan dan penyempurnaangeventreactor
saya yang belum dipublikasikan yang akan segera saya publikasikan, semoga sebagai bagian darigeventreactor
repositori GitHub asli: https://github.com/jyio/geventreactor .Tata letak saya saat ini memungkinkan saya untuk memprogram dalam model pemrograman Gevent yang bagus, dan memanfaatkan hal-hal seperti non-blocking
socket
,urllib2
dan modul lainnya. Saya dapat menggunakan kode Python biasa untuk melakukan hal-hal biasa, yang bertentangan dengan kurva belajar dan ketidaknyamanan melakukan hal-hal sederhana, dasar bahkan dengan cara Twisted. Saya juga dapat dengan mudah menggunakan sebagian besar perpustakaan pihak ke-3 yang biasanya tidak dipertanyakan dengan Twisted, atau membutuhkan penggunaan utas.Saya juga dapat sepenuhnya menghindari pemrograman berbasis callback yang canggung dan seringkali terlalu rumit dengan menggunakan greenlets (bukan
Deferred
s dan callback, dan / atau@inlineCallbacks
).(Jawaban ini ditulis berdasarkan pengalaman pribadi saya menggunakan Twisted dan Gevent dalam proyek-proyek kehidupan nyata, dengan pengalaman lebih banyak menggunakan Twisted (tapi saya tidak mengklaim sebagai ahli Twisted). Perangkat lunak yang saya harus tulis tidak harus menggunakan terlalu banyak fitur Twisted, jadi tergantung pada serangkaian fitur yang Anda butuhkan dari Twisted, kompleksitas ekstra (relatif tidak menyakitkan) dari pencampuran Gevent dan Twisted mungkin tidak sebanding dengan masalahnya.)
sumber