Мне трудно понять, что на самом деле делает аргумент timeout
в urllib.request.urlopen
.
Когда я подключаюсь к inte rnet через VPN моей компании, тем выше значение I установить для timeout
, тем больше времени требуется для получения данных с сервера.
Ниже приведен пример, где я использую urllib.request.urlopen
для загрузки Википедии lo go с различными значениями времени ожидания.
Когда я подключен к VPN моей компании, установка 2 timeout=1
занимает около 2 секунд, приблизительно c приблизительно 30 секунд, когда я использую timeout=30
, и около 60 секунд, если тайм-аут не установлен.
Однако, если я запускаю тот же сценарий без VPN, то время загрузки будет быстрее (примерно 0,4 с c приблизительно) и не изменится при различных значениях времени ожидания.
# Run on Mac OS with
#
# Python 3.7.6 (default, Feb 3 2020, 19:33:41)
# Type 'copyright', 'credits' or 'license' for more information
# IPython 7.7.0 -- An enhanced Interactive Python. Type '?' for help.
# PyDev console: using IPython 7.7.0
# Python 3.7.6 (default, Feb 3 2020, 19:33:41)
# [Clang 11.0.0 (clang-1100.0.33.16)] on darwin
import time
import datetime
import urllib.request
img_url = 'https://upload.wikimedia.org/wikipedia/commons/d/de/Wikipedia_Logo_1.0.png'
ts = time.time()
with urllib.request.urlopen(img_url, timeout=1) as response:
img=response.read()
te = time.time()
print(f"Elapsed time, timeout = 1: {datetime.timedelta(seconds=te-ts)}")
ts = time.time()
with urllib.request.urlopen(img_url, timeout=30) as response:
img=response.read()
te = time.time()
print(f"Elapsed time, timeout = 30: {datetime.timedelta(seconds=te-ts)}")
ts = time.time()
with urllib.request.urlopen(img_url) as response:
img=response.read()
te = time.time()
print(f"Elapsed time, default timeout: {datetime.timedelta(seconds=te-ts)}")
Как я могу отладить что происходит и как я могу это исправить?