Pycom запрашивает тайм-ауты не работает, как ожидалось - PullRequest
0 голосов
/ 23 июня 2019

Стандартная библиотека запросов Pycom (часть ниже) не поддерживает настраиваемые пользователем таймауты.

def request(method, url, data=None, json=None, headers={}, stream=None):
    try:
        proto, dummy, host, path = url.split("/", 3)
    except ValueError:
        proto, dummy, host = url.split("/", 2)
        path = ""
    if proto == "http:":
        port = 80
    elif proto == "https:":
        import ussl
        port = 443
    else:
        raise ValueError("Unsupported protocol: " + proto)

    if ":" in host:
        host, port = host.split(":", 1)
        port = int(port)

    ai = usocket.getaddrinfo(host, port)
    ai = ai[0]
    s = usocket.socket(ai[0], ai[1], ai[2])

    try:
        s.connect(ai[-1])

Если сервер, с которым я пытаюсь связаться, не отвечает, код ждет в течение 30 секунд

ai = usocket.getaddrinfo(host, port)

, а затем завершается с ошибкой OSError.

Так что я изменил его, используя https://github.com/micropython/micropython-lib/pull/263/files в качестве руководства

def request(method, url, data=None, json=None, headers={}, stream=None, timeout=5):
    try:
        proto, dummy, host, path = url.split("/", 3)
    except ValueError:
        proto, dummy, host = url.split("/", 2)
        path = ""
    if proto == "http:":
        port = 80
    elif proto == "https:":
        import ussl
        port = 443
    else:
        raise ValueError("Unsupported protocol: " + proto)

    if ":" in host:
        host, port = host.split(":", 1)
        port = int(port)

    ai = usocket.getaddrinfo(host, port)
    ai = ai[0]
    s = usocket.socket(ai[0], ai[1], ai[2])

    if timeout is not None:
        assert hasattr(usocket.socket, 'settimeout'), 'Socket does not support timeout'
        s.settimeout(timeout)

    try:
        s.connect(ai[-1])

Это не принесло мне пользы, эта чертова штука все еще ждет 30 секунд, если нет ответа сервера.Во всяком случае, мне хуже, потому что теперь он также ждет 5 секунд после каждого ответа сервера, прежде чем вернуть данные, тогда как раньше я получал данные в тот момент, когда сервер ответил.

Я полагаю, что тайм-аут 30 секунд должен бытьдоступно где-то, я просто не могу понять, где.Я немного над головой здесь.Кто-нибудь может предложить несколько предложений?

...