Pemeriksaan proxy Python: mengapa Future.cancel() membiarkan thread tetap berjalan
Pahami mengapa membatalkan future yang tertunda tidak menghentikan pemeriksaan jaringan yang aktif, dan batasi perlombaan proxy tanpa mengklaim bahwa itu membuktikan kesehatan tujuan.
Satu worker menemukan proxy yang dapat digunakan. Anda mengembalikan alamatnya, memanggil cancel pada future lainnya, dan berharap aktivitas jaringan berhenti. Bisa jadi tidak.
Future dapat dibatalkan sebelum callable-nya dimulai. Setelah sebuah thread sudah menjalankan permintaan, membatalkan Future-nya tidak menghentikan operasi socket tersebut. Worker membutuhkan operasi jaringan terbatas dan jalur pembersihannya sendiri.
Masa hidup executor juga penting. Keluar dari konteks ThreadPoolExecutor menunggu pekerjaannya selesai. Menemukan satu hasil cepat lalu menunggu beberapa worker lambat dapat membuat total penundaan pemanggil sama sekali tidak menyerupai latensi yang dilaporkan pemenang.
Batasi perlombaan sebelum memulainya
- Batasi jumlah pemeriksaan bersamaan alih-alih mengirimkan daftar publik yang tidak terbatas. Daftar proxy gratis menyediakan kandidat untuk masukan pemeriksa, dengan protokol setiap titik akhir dipertahankan untuk worker.
- Berikan setiap permintaan kebijakan koneksi dan pembacaan yang sesuai.
- Berikan pemanggil anggaran keputusan secara keseluruhan.
- Tentukan siapa yang menguras atau menutup hasil dari worker yang bertahan lebih lama dari keputusan.
Menunggu lebih singkat untuk sebuah Future tidak sama dengan memperpendek permintaan yang mendasarinya. Demikian pula, meninggalkan hasilnya tidak serta-merta melepaskan setiap sumber daya jaringan.
Hasil sukses pertama juga hanya pemeriksaan sukses pertama. Itu bisa bergantung pada penjadwalan, koneksi yang di-cache, dan tujuan pemeriksaan tertentu. Itu tidak membuktikan bahwa titik akhir tersebut secara universal tercepat atau bahwa tugas sebenarnya akan berhasil.
Sering kali kumpulan kecil yang dipertahankan dengan pengamatan terbaru lebih sederhana daripada berlomba dengan seluruh daftar sebelum setiap unduhan. Gunakan hasil operasi nyata untuk memperbarui catatan, dengan kebijakan pemulihan terkendali untuk kegagalan. Pemeriksaan awal harus mendapatkan biayanya alih-alih menggandakan setiap tugas karena kebiasaan.