Python 3.7 как исправить более длительное время загрузки при увеличении времени ожидания в urllib.request.urlopen, когда в моей компании VPN - PullRequest
0 голосов
/ 18 марта 2020

Мне трудно понять, что на самом деле делает аргумент 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)}")

Как я могу отладить что происходит и как я могу это исправить?

...