Saya telah mengembangkan sebuah aplikasi, di mana saya perlu menangani pemutusan sementara pada klien (antarmuka jaringan mati).
Awalnya saya mengira pendekatan di bawah ini akan berhasil, tetapi terkadang jika memulai ulang antarmuka jaringan, panggilan s.get(url)
akan terhenti tanpa batas waktu:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url)
Dengan menambahkan argumen kata kunci timeout=10
ke s.get(url)
, kode kini mampu menangani perilaku pemblokiran ini:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url, timeout=10)
Mengapa batas waktu diperlukan untuk menangani kasus-kasus di mana antarmuka jaringan direset atau mati sementara? Mengapa max_retries=Retry(total=10, connect=10, read=10)
tidak mampu menangani ini? Secara khusus, mengapa s.get()
tidak diberitahu bahwa antarmuka jaringan menjadi offline, sehingga dapat mencoba kembali sambungan alih-alih terhenti?