Apache, secara default, akan menyajikan file kepada pengguna secepat bandwidth atau TCP/IP memungkinkan. Di lingkungan tempat Anda menghosting file untuk diunduh, dan Anda tidak ingin satu pengguna pun menghabiskan bandwidth server Anda, Anda mungkin ingin membatasi kecepatan unduhan untuk pengguna Anda. Ini memungkinkan server Anda untuk melayani lebih banyak pengguna sekaligus
Anda dapat membatasi kecepatan unduh pengguna Apache Anda dengan menggunakan mod_ratelimit. Anda memiliki opsi untuk menentukan kecepatan yang diinginkan untuk setiap konfigurasi Lokasi atau VirtualHost
Langkah-langkah untuk mempercepat kecepatan unduh di Apache
Luncurkan aplikasi terminal pilihan Anda
Aktifkan modul batas nilai untuk Apache. $ sudo a2enmod ratelimit #Ubuntu, Debian and SUSE Considering dependency env for ratelimit: Module env already enabled Enabling module ratelimit. To activate the new configuration, you need to run: systemctl restart apache2
Distribusi dengan dukungan a2enmod cukup menjalankan perintah di atas tanpa harus mengaktifkan modul yang diperlukan secara manual
PilihanDebian, UbuntuopenSUSE dan SLESFedora Core, CentOS, RHELmacOShomebrewxamppa2enmod supportyesyesnonononoModules untuk menginstalnoneModule namen/aratelimitLoadmodule directiven/aLoadModule ratelimit_module/mod_ratelimit. Jadi
Tambahkan opsi yang relevan dalam file konfigurasi Apache untuk konfigurasi Lokasi atau VirtualHost tertentu di mana Anda ingin bandwidth dibatasi. # ..... # .... SetOutputFilter RATE_LIMIT SetEnv rate-limit 512 SetEnv rate-initial-burst 1024 _
Sangat mudah untuk mengirim satu permintaan HTTP dengan menggunakan paket ... download 100 links in 9.438416004180908 seconds 1. Bagaimana jika saya ingin mengirim ratusan atau bahkan jutaan permintaan HTTP secara asinkron?
Kode berjalan di host VM Linux (Ubuntu) di cloud dengan Python 3. 7. Semua kode di inti siap untuk disalin dan dijalankan
Solusi #1. Jalan Sinkron
Cara paling sederhana, mudah dipahami, tetapi juga paling lambat. Saya memalsukan 100 tautan untuk pengujian oleh operator daftar python ajaib ini
Kode
Dibutuhkan sekitar 10 detik untuk menyelesaikan pengunduhan 100 tautan
... download 100 links in 9.438416004180908 secondsSebagai solusi sinkron, masih ada ruang untuk ditingkatkan. Kita dapat memanfaatkan objek ... download 100 links in 9.438416004180908 seconds _2 untuk lebih meningkatkan kecepatan. Objek Sesi akan menggunakan penggabungan koneksi urllib3, yang berarti, untuk mengulangi permintaan ke host yang sama, koneksi TCP yang mendasari objek ... download 100 links in 9.438416004180908 seconds 2 akan digunakan kembali, sehingga mendapatkan peningkatan kinerja
Jadi jika Anda membuat beberapa permintaan ke host yang sama, koneksi TCP yang mendasarinya akan digunakan kembali, yang dapat menghasilkan peningkatan kinerja yang signifikan — Objek Sesi
Untuk memastikan objek permintaan keluar tidak peduli berhasil atau tidak, saya akan menggunakan pernyataan ... download 100 links in 9.438416004180908 seconds 4 sebagai pembungkus. kata kunci ... download 100 links in 9.438416004180908 seconds 4 di Python hanyalah solusi bersih untuk menggantikan ... download 100 links in 9.438416004180908 seconds 6
Mari kita lihat berapa detik yang dihemat dengan mengubah ke ini
Sepertinya kinerjanya benar-benar ditingkatkan menjadi 5. x detik
... download 100 links in 5.367443561553955 secondsTapi ini masih lambat, mari kita coba solusi multi-threading
Solusi #2. Cara Multi-Threading
Threading python adalah topik yang berbahaya untuk didiskusikan, terkadang, multi-threading bisa menjadi lebih lambat. David Beazley yang dibawa dengan nyali menyampaikan presentasi yang luar biasa untuk membahas topik berbahaya ini. ini link Youtubenya
Lagi pula, saya masih akan menggunakan Python Thread untuk melakukan pekerjaan permintaan HTTP. Saya akan menggunakan antrian untuk menahan 100 tautan dan membuat 10 utas pekerja unduhan HTTP untuk menggunakan 100 tautan secara tidak sinkron
Cara kerja multi-utas
Untuk menggunakan objek Sesi, sia-sia membuat 10 objek Sesi untuk 10 utas, saya ingin satu objek Sesi dan menggunakannya kembali untuk semua pekerjaan pengunduhan. Untuk mewujudkannya, Kode akan memanfaatkan objek ... download 100 links in 9.438416004180908 seconds 7 dari paket ... download 100 links in 9.438416004180908 seconds 8, sehingga 10 pekerja utas akan berbagi satu objek Sesi
Kode
Hasil
... download 100 links in 1.1333789825439453 secondsIni cepat. jauh lebih cepat daripada solusi sinkron
Solusi #3. Multi-Threading oleh ThreadPoolExecutor
Python juga menyediakan ... download 100 links in 9.438416004180908 seconds _9 untuk melakukan pekerjaan multi-utas, saya sangat menyukai ThreadPoolExecutor
Pada versi Thread dan Queue, terdapat loop ... download 100 links in 5.367443561553955 seconds 0 pada HTTP request worker, hal ini membuat fungsi worker terbelit dengan Queue dan memerlukan perubahan kode tambahan dari versi sinkron ke versi asinkron
Menggunakan ThreadPoolExecutor, dan fungsi petanya, kita dapat membuat versi Multi-Thread dengan kode yang sangat ringkas, memerlukan perubahan kode minimum dari versi sinkron
Cara kerja versi ThreadPoolExecutor
Kode
Dan hasilnya secepat versi Thread-Queue
... download 100 links in **1.0798051357269287** secondsSolusi #4. asyncio dengan aiohttp
Semua orang mengatakan ... download 100 links in 5.367443561553955 seconds _1 adalah masa depan, dan itu cepat. Beberapa orang menggunakannya membuat 1 juta permintaan HTTP dengan Python ... download 100 links in 5.367443561553955 seconds 2 dan ... download 100 links in 5.367443561553955 seconds 3. Meskipun ... download 100 links in 5.367443561553955 seconds _1 sangat cepat, ia menggunakan nol Python Multi-Threading
Percaya atau tidak, asyncio berjalan dalam satu utas, dalam satu inti CPU
Loop Acara asyncio
Perulangan acara yang diterapkan di ... download 100 links in 5.367443561553955 seconds _1 hampir sama dengan yang disukai di Javascript
Asyncio sangat cepat sehingga dapat mengirim hampir semua jumlah permintaan ke server, satu-satunya batasan adalah bandwidth mesin dan internet Anda
Terlalu banyak permintaan HTTP yang dikirim akan berperilaku seperti "menyerang". Beberapa situs web mungkin melarang alamat IP Anda jika terlalu banyak permintaan yang terdeteksi, bahkan Google juga akan melarang Anda. Untuk menghindari pelarangan, saya menggunakan objek konektor TCP khusus yang menentukan koneksi maksimum TCP ke 10 saja. (mungkin aman untuk mengubahnya menjadi 20)
my_conn = aiohttp.TCPConnector(**_limit_=10**)Kode ini cukup singkat dan ringkas
Dan kode di atas menyelesaikan 100 tautan yang diunduh dalam 0. 74 detik
... download 100 links in 0.7412574291229248 secondsPerhatikan bahwa jika Anda menjalankan kode di Jupyter Notebook atau IPython. silakan juga instal paket... download 100 links in 5.367443561553955 seconds _6. (Berkat tautan StackOverflow ini. Penghargaan untuk Diaf Badreddine. )
pip install nest-asynciodan tambahkan dua baris kode berikut di awal kode
import nest_asyncio nest_asyncio.apply()Solusi #5. Bagaimana dengan Node.js?. js?
Saya bertanya-tanya, bagaimana jika saya melakukan pekerjaan yang sama di Node. js, yang memiliki event loop bawaan?
Ini kode lengkapnya
Dibutuhkan 1. 1 ke 1. 5 detik, Anda dapat menjalankannya untuk melihat hasilnya di mesin Anda
... download 100 links in 9.438416004180908 seconds 0Python, menangkan permainan kecepatan
(Sepertinya permintaan paket Node sudah tidak digunakan lagi, tetapi contoh ini hanya untuk menguji bagaimana Node. js event loop melakukan perbandingan dengan event loop Python. )
Beri tahu saya jika Anda memiliki solusi yang lebih baik/lebih cepat. Jika Anda memiliki pertanyaan, tinggalkan komentar dan saya akan melakukan yang terbaik untuk menjawab, Jika Anda menemukan kesalahan atau kesalahan, jangan ragu untuk menandainya. Terima kasih sudah membaca
Apakah server HTTP python aman?
http. server pada dasarnya ditujukan untuk pengujian dan tidak memiliki fitur keamanan apa pun . Paling tidak, Anda dapat melakukan autentikasi kata sandi dasar dengan Apache.Apa yang dilakukan python SimpleHTTPServer?
Modul SimpleHTTPServer adalah modul Python yang memungkinkan pengembang meletakkan dasar untuk mengembangkan server web . Namun, sebagai sysadmin, kita dapat menggunakan modul untuk melayani file dari direktori. Modul memuat dan menyajikan file apa pun di dalam direktori pada port 8000 secara default.Bagaimana cara menggunakan SimpleHTTPServer dengan python?
Cara Menggunakan Python 'SimpleHTTPServer' untuk Membuat Server Web atau Melayani File Secara Instan .Langkah 1. Periksa Instalasi Python. .Langkah 2. Buat Direktori Pengujian dan Aktifkan SimpleHTTPServer. .Langkah 3. Mengubah Port Server HTTP Sederhana. .Langkah 4. Sajikan File dari Lokasi Berbeda. .Langkah 5. Sajikan File HTMLApakah python memiliki server HTTP?
Python hadir dengan modul bawaan yang dikenal sebagai SimpleHTTPServer , yang dengan kata lain adalah server HTTP sederhana yang memberi Anda penangan permintaan GET dan HEAD standar. Modul ini dapat mengubah direktori apa pun di sistem Anda menjadi server web.