Kecepatan batas server python http

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

Kecepatan batas server python http

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

  1. Luncurkan aplikasi terminal pilihan Anda

  2. 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

  3. 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

    url_list = ["https://www.google.com/","https://www.bing.com"]*50
    

    Kode

    Dibutuhkan sekitar 10 detik untuk menyelesaikan pengunduhan 100 tautan

    ...
    download 100 links in 9.438416004180908 seconds
    

    Sebagai 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 seconds
    

    Tapi 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

    Kecepatan batas server python http

    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

    from threading import Thread,local
    ...
    thread_local = local()
    ...
    

    Kode

    Hasil

    ...
    download 100 links in 1.1333789825439453 seconds
    

    Ini 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

    Kecepatan batas server python http

    Cara kerja versi ThreadPoolExecutor

    Kode

    Dan hasilnya secepat versi Thread-Queue

    ...
    download 100 links in **1.0798051357269287** seconds
    

    Solusi #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

    Kecepatan batas server python http

    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 seconds
    

    Perhatikan 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-asyncio
    

    dan 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
    
    0

    Python, 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 HTML

    Apakah 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.