Permintaan HTTP Serentak dalam Python: Mengoptimumkan Kepantasan
Apabila berhadapan dengan keperluan untuk menghantar banyak permintaan HTTP dengan cekap, persoalan timbul: " Bagaimanakah kita mencapai konkurensi maksimum dalam Python dengan penggunaan sumber yang paling sedikit?" Masalah ini diserlahkan dalam usaha pembangun untuk menghantar 100,000 permintaan HTTP dan mendapatkan kod statusnya menggunakan Python 2.6.
Satu penyelesaian yang berkesan melibatkan memanfaatkan berbilang benang dan sistem baris gilir. Seperti yang digariskan dalam kod yang disediakan:
-
Tentukan Fungsi doWork: Fungsi ini tanpa henti mendapatkan semula URL daripada baris gilir, mendapatkan kod status HTTPnya dan melakukan tindakan seterusnya dengan hasilnya.
-
Laksanakan Fungsi getStatus: Fungsi pembantu ini menghuraikan URL, mewujudkan sambungan dan mengambil status respons.
-
Buat Baris Gilir dan Benang: Baris gilir berbilang pengeluar, berbilang pengguna dimulakan untuk memegang dua kali bilangan urutan serentak. Urutan serentak dibuat dan diberikan fungsi doWork.
-
URL Proses: Gelung membaca URL daripada fail dan menambahkannya pada baris gilir untuk diproses oleh urutan pekerja.
-
Tunggu Selesai: Program berhenti seketika sehingga semua tugasan dalam baris gilir adalah selesai.
Pendekatan ini menawarkan beberapa kelebihan:
-
Pemprosesan Selari: Berbilang utas serentak mengendalikan permintaan, meningkatkan kelajuan pemprosesan dengan ketara.
-
Pengurusan Baris Gilir: Sistem baris gilir dengan cekap mengagihkan kerja antara benang, memastikan daya pemprosesan optimum.
-
Pengendalian Ralat: Pengecualian ditangkap dan dilaporkan dengan anggun untuk setiap URL.
-
Fleksibiliti: Fungsi doSomethingWithResult boleh disesuaikan untuk mengendalikan keputusan seperti yang dikehendaki.
Berbanding dengan penyelesaian lain menggunakan rangka kerja seperti Twisted, pendekatan ini diketahui mempamerkan prestasi yang lebih pantas dan mengurangkan penggunaan CPU.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Konkurensi Maksimum untuk Permintaan HTTP dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!