ОНОВЛЕННЯ: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
У новій версії requests
:
Якщо ви вказали одне значення для тайм-аута, наприклад:
r = requests.get('https://github.com', timeout=5)
Значення таймауту буде застосовано як до, так connect
і до read
таймаутів. Вкажіть кортеж, якщо ви хочете встановити значення окремо:
r = requests.get('https://github.com', timeout=(3.05, 27))
Якщо віддалений сервер дуже повільний, ви можете сказати Запити, щоб назавжди почекати відповіді, передавши None як значення тайм-ауту, а потім отримавши чашку кави.
r = requests.get('https://github.com', timeout=None)
Моя стара (ймовірно, застаріла) відповідь (яка була розміщена давно):
Є й інші способи подолати цю проблему:
1. Використовуйте TimeoutSauce
внутрішній клас
Від: https://github.com/kennethreitz/requests/isissue/1928#issuecomment-35811896
import requests from requests.adapters import TimeoutSauce
class MyTimeout(TimeoutSauce):
def __init__(self, *args, **kwargs):
connect = kwargs.get('connect', 5)
read = kwargs.get('read', connect)
super(MyTimeout, self).__init__(connect=connect, read=read)
requests.adapters.TimeoutSauce = MyTimeout
Цей код повинен змусити нас встановити час очікування читання рівним тайм-ауту підключення, який є значенням тайм-ауту, який ви передаєте на дзвінок Session.get (). (Зверніть увагу, що я фактично не перевіряв цей код, тому він може потребувати швидкої налагодження. Я просто записав його прямо у вікно GitHub.)
2. Використовуйте виделку запитів від kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
З його документації: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
Якщо ви вказали одне значення для тайм-аута, наприклад:
r = requests.get('https://github.com', timeout=5)
Значення таймауту буде застосовано як до підключення, так і до часу очікування. Вкажіть кортеж, якщо ви хочете встановити значення окремо:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke попросив його об'єднати в проект основних запитів, але він ще не прийнятий.