2010-11-15 4 views
5

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

Не нашли очень медленное подключение к Интернету, какой метод я могу использовать?

Кажется, я помню интересное приложение/набор для моделирования таких вещей. Может, кто-то знает ссылку?

+0

здесь [пример кода 'slow_http_server.py'] (http://stackoverflow.com/a/32685765/4279) – jfs

ответ

10

я обычно использую Netcat слушать на порту 80 моей локальной машине:

nc -l 80 

Затем я использую http://localhost/ в качестве URL-адреса запроса в своем приложении. Netcat ответит на порт http, но никогда не даст ответа, поэтому запрос будет гарантирован тайм-аутом при условии, что вы указали таймаут в своем вызове urllib2.urlopen() или по телефону socket.setdefaulttimeout().

+0

очень хорошо. никогда не думал об этом! –

+0

Мне пришлось использовать: nc -l -p 80 Отличная идея! Благодарю. – mhost

+0

Да, более старые версии netcat имеют несколько разные параметры командной строки, IIRC. Рад, что это сработало! –

0

Почему бы не написать очень простой скрипт CGI в bash, который просто спит для требуемого периода ожидания?

3
import socket 

socket.setdefaulttimeout(2) # set time out to 2 second. 

Если вы хотите установить тайм-аут для каждого запроса вы можете использовать аргумент тайм-аут для urlopen

+0

Следует иметь в виду, что аргумент таймаута для urlopen был добавлен только в Python 2.6 – mhost

6

Вы можете установить время ожидания по умолчанию, как показано выше, но вы можете использовать сочетание обоих, так как Python 2.6, есть опция тайм-аут в urlopen метода:

import urllib2 
import socket 

try: 
    response = urllib2.urlopen("http://google.com", None, 2.5) 
except URLError, e: 
    print "Oops, timed out?" 
except socket.timeout: 
    print "Timed out!" 

таймаут по умолчанию для urllib2 бесконечна , и импорт сокета гарантирует, что вы поймаете таймаут в качестве исключения socket.timeout

0

Если вы работаете на Mac, speedlimit очень круто.

Существует также dummynet. Это намного более хардкор, но это также позволяет вам делать гораздо более интересные вещи. Вот pre-configured VM image.

Если вы работаете на Linux-сервере уже, есть netem.

Я считаю, что слышал о Windows-инструменте под названием TrafficShaper, но тот, который я еще не проверил.

Смежные вопросы