
Pada tahun 2018, Python memperkuat popularitasnya di kalangan programmer dan memasuki
3 bahasa terpopuler di github . Semakin banyak orang yang bergerak ke sisi terang ... yaitu, Python. Semakin banyak pengembang yang tertarik pada bahasa ini dan mengembangkan proyek mereka dengan bantuannya. Salah satu area populer untuk Python adalah pengembangan web. Saya ingin tidak hanya proses pengembangan menjadi nyaman dan cepat, tetapi juga proyek-proyek itu sendiri dapat membanggakan kecepatan dan stabilitas kerja.
Python memiliki banyak kerangka kerja yang menyelamatkan programmer dari operasi rutin dan memungkinkan Anda untuk fokus pada penyelesaian masalah. Pada 2018, kerangka kerja yang ada diperbarui dan alat baru muncul.
Oleh karena itu, kami memutuskan untuk menyusun analisis komparatif kerangka kerja populer yang tidak akan hilang, kami harap, relevansinya sepanjang 2019 dan menentukan yang tercepat dari mereka.
Peserta tes
Versi: 2.1.4
Deskripsi: prosesor paling populer untuk Python, yang di luar kotak menyelesaikan banyak masalah (admin, otorisasi, masuk, ORM, dll.). Ini menyederhanakan kehidupan pengembang, tetapi jika kami memprioritaskan kecepatan kerja, maka terkadang prosesor seperti itu melawan kami dan ini memengaruhi produktivitas. Karena alasan ini, ia kemungkinan besar tidak akan mengambil Kerangka Kerja Web Python Tercepat di nominasi 2019.
Versi: 1.0.2
Deskripsi: kerangka Python paling populer (bahkan Django menyalip bintang di GitHub). Pilihan populer dalam kasus pengembangan proyek kecil yang tidak memerlukan roti yang ada di Django. Memungkinkan Anda menyebarkan aplikasi dengan cepat. Mungkin lebih cepat daripada Django dalam hal kecepatan, tetapi memiliki fungsi yang sangat sedikit di luar kotak.
Versi: 3.5.1
Deskripsi: Kerangka Python asinkron yang sangat menarik. Ini memiliki versi klien dan server, yang secara signifikan membebaskan tangan Anda selama pengembangan. Ini memiliki permintaan asinkron yang sangat nyaman dari versi klien, serta indikator kecepatan server yang sangat baik dengan sejumlah besar permintaan. Pasti harus masuk ke tiga besar.
Versi: 18.12
Deskripsi: kita dapat mengatakan bahwa ini adalah "labu multi-berulir" dengan semua konsekuensinya. Untuk alasan ini, kami berpikir bahwa hasilnya harus sangat bagus.
Versi: 5.1.1
Deskripsi: veteran asynchronous dari gerakan Python, menetapkan tren asynchrony pada tahun 2010. Itu tidak kehilangan relevansinya dan menerima versi ke-5 pada tahun 2018. Ambang entri yang cukup tinggi untuk pemula. Populer di kalangan pythonis jadul, dan kami berpikir untuk alasan yang baik. Harus menunjukkan hasil yang bagus.
Versi yang diuji: tidak ada rilis di GitHub
Deskripsi: kerangka kerja menjanjikan yang muncul pada Juni 2018 dan selama enam bulan terakhir telah memperoleh lebih dari 4000 bintang. Memiliki pengukuran kinerja yang mengesankan di GitHub. Kami pikir Vibora akan menjadi favorit ras kami, tapi sayangnya karena kurangnya kemampuan untuk berjalan di bawah Python> = 3,7 dan kurangnya versi kerangka yang stabil, kami mengecualikan Vibora.
Di GitHub, pengembang menjanjikan Vibora yang “baru secara radikal” segera. Mari kita lihat apa yang mereka lakukan dan pastikan untuk menuliskannya.
Metodologi pengujian
Pengujian dilakukan pada Apple iMac 27 '' Retina 5K 2017, CPU: 3.5GHz i5, RAM: 8GB, 1000GB Fusion Drive, OSX 10.14.2 menggunakan utilitas WRK:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/db/
Pengujian dilakukan pada Python 3.7.2. Semua kerangka kerja diluncurkan menggunakan
Gunicorn dengan dua pekerja. Mungkin dalam beberapa kasus penggunaan
uwsgi akan mempengaruhi hasil, tetapi karena kami menetapkan tujuan untuk menguji kerangka kerja, dan bukan bagaimana menjalankannya, kami memutuskan untuk mengabaikannya.
Kami hanya memiliki satu jenis tes: DB Test, di mana kami mendapatkan data string dari database dan mengembalikannya sebagai respons html (1 entri dalam 79 byte). Postgres 11 digunakan sebagai basis data.
Psycopg2 digunakan sebagai penggerak akses basis data untuk kerangka kerja sinkron dan
asyncpg untuk kerangka asinkron.
Perpustakaan untuk kerangka kerja asinkron memutuskan untuk menggunakan
uvloop sebagai loop peristiwa.
Hasil
Permintaan per detik

Posisi kepemimpinan yang cukup diharapkan oleh aiohttp dan Sanic, tetapi hasil yang tidak terduga dari Tornado.
Transfer Data per Detik (Kb)

Django jauh di belakang dalam jumlah data yang ditransfer per detik.
Waktu permintaan rata-rata (ms)

Lagi-lagi Tornado mengejutkan, yang pada awalnya kami andalkan. Impressive is Flask, yang dalam rata-rata waktu kueri bersaing dengan calon pemimpin.
Waktu permintaan maksimum (detik)

Semua "percobaan" menunjukkan hasil yang hampir sama untuk waktu permintaan maksimum. Segalanya, seperti yang kami harapkan.
Hasil akhir
12 utas
400 koneksi
| Rata-rata | Maks | Permintaan / dtk | Transfer / dtk (KB) |
Latensi (ms) | Req / dtk | Latensi (ms) | Req / dtk |
Django | 147.99 | 120.91 | 1.98 | 640 | 425.71 | 78,99 |
Labu | 186.8 | 65.65 | 1.75 | 280 | 546.2 | 127.48 |
aiohttp | 165,07 | 247.16 | 1.98 | 585 | 1966.28 | 439.72 |
Sanic | 194.8 | 170.85 | 1.98 | 470 | 1520.9 | 292.6 |
Tornado | 279.3 | 101.71 | 1.74 | 272 | 778.75 | 222,07 |
Ringkasan
Aiohttp: pemimpin kinerja pada awal 2019. Jika tugas Anda membutuhkan kinerja terbaik, maka Anda harus melihatnya lebih dekat. Selain itu, Anda dapat bereksperimen dengan aiohttp opsi startup untuk memeras lebih banyak darinya. Ini memiliki versi klien yang memungkinkan Anda untuk membuat permintaan asinkron tanpa pustaka tambahan. Oleh karena itu, untuk mengimplementasikan layanan baru kami yang penuh muatan, kami memilihnya.
Sanic: Popularitas kerangka kerja mendahului kinerjanya. Sebuah mukjizat tidak terjadi dan untuk mengambil alih pemimpin itu tidak berhasil. Bersama dengan utas tentang Reddit tentang masalah keamanan - kami tidak akan menggunakan Sanic sekarang dan menunggu tindakan dari pengembang.
Tornado: "Kekecewaan tahun ini." Sehubungan dengan hasil - kami tidak berpikir bahwa Tornado harus dipilih untuk pelaksanaan proyek baru. Kami berharap para pengembang datang dengan sesuatu dan memperbaiki situasi.
Django menunjukkan hasil yang diharapkan. Kami menyukai Django untuk fitur-fiturnya dan untuk membebaskan kami dari rutinitas, dan bukan untuk kecepatan kerja. Komunitas yang luas, sejumlah besar bahan di Web, sejumlah besar proyek yang dilaksanakan dalam domain publik - semua ini membuatnya menarik bagi pemula. Jika kami memiliki tugas mengembangkan MVP dari layanan web biasa, kami akan memilihnya pada 2019.
Labu juga menunjukkan hasil yang diharapkan. Bypassed Django karena fakta bahwa ia tidak memiliki fungsi yang kaya seperti di luar kotak. Saya tidak mencapai kecepatan kerangka kerja yang tidak sinkron. Kami akan memilihnya pada 2019 untuk implementasi proyek hewan peliharaan kecil atau ketika kecepatan sudah penting, tetapi belum ada keinginan untuk berurusan dengan kerangka kerja yang tidak sinkron.
Anda dapat melihat semua file benchmark sumber dalam repositori
Python Frameworks Benchmark .