Python proxy kontrolleri: Future.cancel() iş parçacıklarını neden çalışır bırakır
Bekleyen future'ları iptal etmenin etkin ağ kontrollerini neden durdurmadığını anlayın ve proxy yarışını hedefin sağlığını kanıtladığını iddia etmeden sınırlayın.
Bir worker kullanılabilir bir proxy bulur. Adresini döndürürsünüz, diğer future'larda cancel çağırırsınız ve ağ etkinliğinin durmasını beklersiniz. Durmayabilir.
Bir Future, callable'ı başlamadan önce iptal edilebilir. Bir iş parçacığı zaten bir isteği yürütüyorsa, Future'unu iptal etmek o socket işlemini kesmez. Worker'ın kendi sınırlı ağ işlemine ve temizleme yoluna ihtiyacı vardır.
Executor'ın ömrü de önemlidir. Bir ThreadPoolExecutor bağlamından çıkmak, işinin bitmesini bekler. Hızlı bir sonuç bulup sonra birkaç yavaş worker'ı beklemek, çağıranın toplam gecikmesini kazananın bildirdiği gecikmeye hiç benzemez hale getirebilir.
Yarışı başlamadan önce sınırlayın
- Sınırsız bir genel liste göndermek yerine eşzamanlı kontrollerin sayısını sınırlayın. Ücretsiz proxy listesi denetleyicinin girdisi için adaylar sağlar ve her uç noktanın protokolü worker için saklanır.
- Her isteğe uygun bir bağlantı ve okuma ilkesi verin.
- Çağırana genel bir karar bütçesi verin.
- Karardan daha uzun yaşayan worker'ların sonuçlarını kimin boşaltacağını veya kapatacağını tanımlayın.
Bir Future'ı daha kısa beklemek, onun altındaki isteği kısaltmakla aynı şey değildir. Aynı şekilde, sonucu bırakmak her ağ kaynağını hemen serbest bırakmaz.
İlk başarılı sonuç da yalnızca ilk başarılı kontroldür. Zamanlamaya, önbelleğe alınmış bağlantılara ve belirli kontrol hedefine bağlı olabilir. Uç noktanın evrensel olarak en hızlı olduğunu veya gerçek görevin başarılı olacağını kanıtlamaz.
Genellikle son gözlemlerle tutulan küçük bir havuz, her indirmeden önce tüm listeyle yarışmaktan daha basittir. Kaydı güncellemek için gerçek işlemin sonucunu kullanın, hatalar için kontrollü bir kurtarma ilkesiyle. Ön kontrol, alışkanlıkla her görevi ikiye katlamak yerine maliyetini hak etmelidir.