тайм-аут асинхронный - PullRequest
       10

тайм-аут асинхронный

4 голосов
/ 15 декабря 2011

Простой асинхронный http-клиент, долго зависает с недоступными сайтами.

Например, на сайте www.evtur.ru он ждет долго, минут десять и более.

Я не могу найти способ, как минимизировать время ожидания, можно ли, например, сделать тайм-аут за 5 секунд?

Ответы [ 2 ]

1 голос
/ 05 апреля 2013
self.socket.settimeout(nn)

мне кажется, это не сработает.

Однако у asyncore.loop () есть параметр с именем count.Вот псевдокод, что делает asyncore.loop ():

for i in range(count):
    ...
    select(... , timeout)
    ...

Поэтому, если вы хотите 5 секунд, вам нужно будет сделать:

asyncore.loop(timeout=1, count=5)

Но не рекомендуется работать вэто точный путь.Обратите внимание, что если есть «события», вы можете иметь более 5 «отсчетов».Я использую следующий код:

start = int(time.time())

while True:
    asyncore.loop(timeout=1, count=5)
    print "LOOP : %d enqueued, waiting to finish" % len(asyncore.socket_map)

    if len(asyncore.socket_map) == 0 :
        break

    if int(time.time()) - start > timeout :
        print "LOOP : Timeout"
        break
0 голосов
/ 02 февраля 2013

Вам нужно будет установить тайм-аут на сокете диспетчера.После вызова

self.create_socket(socket.AF_INET, socket.SOCK_STREAM)

вы можете позвонить

self.socket.settimeout(nn)

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

...