Menghantar Permintaan HTTP dengan Cekap dalam Python
Apabila berhadapan dengan tugas menghantar sejumlah besar permintaan HTTP dalam Python, persoalan kecekapan timbul. Masalah yang diterangkan melibatkan penghantaran 100,000 permintaan daripada fail URL, mendapatkan kod statusnya dan mencetaknya. Memandangkan bilangan permintaan yang banyak, mencari kaedah terpantas menjadi penting.
Pendekatan Berpintal vs. Tidak Berbelit
Untuk Python 2.6, penyelesaian tidak Berpintal menggunakan benang menyediakan alternatif yang lebih cepat dan mudah. Kod "tanpa berpintal" yang disediakan dalam jawapan menggunakan kumpulan utas 200 utas, memastikan berbilang permintaan HTTP diproses secara serentak.
Butiran Pelaksanaan
Pendekatan menggunakan Objek giliran (q) untuk mengurus URL. Kumpulan urutan dibuat, setiap satu melaksanakan fungsi doWork. Fungsi ini mendapatkan semula URL daripada baris gilir, mendapatkan semula kod statusnya menggunakan getStatus dan melakukan tindakan dengan hasilnya.
getStatus mewujudkan sambungan HTTP, menghantar permintaan HEAD dan mendapatkan semula kod status.
doSomethingWithResult mengendalikan kod status dan URL. Dalam contoh yang disediakan, ia hanya mencetaknya.
Perbandingan Prestasi
Kod yang disediakan telah ditunjukkan sebagai lebih pantas daripada penyelesaian Twisted, menggunakan lebih sedikit sumber CPU. Ini dikaitkan dengan pelaksanaan yang lebih mudah dan ketiadaan overhed Twisted.
Pertimbangan Tambahan
Apabila menggunakan concurrency dalam Python, adalah penting untuk mempertimbangkan faktor seperti keselamatan benang , pengurusan sumber dan pengendalian pengecualian. Kod yang disediakan mengendalikan pengecualian dalam fungsi getStatus dan program utama ditamatkan dengan anggun apabila gangguan papan kekunci.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar 100,000 Permintaan HTTP dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!