2010-11-15 21 views
5

Uygulamamın, urllib2 ile veri yakalarken zaman aşımlarını ele aldığını test etmek istiyorum ve bu isteği zaman aşımına zorlamak için bir yol bulmak istiyorum.urllib2'yi zaman aşımına nasıl zorlayabilirim?

Çok yavaş bir internet bağlantısı bulmanın kısa yolu, hangi yöntemi kullanabilirim?

Bu tür şeyleri simüle etmek için ilginç bir uygulama/paketi hatırlıyorum. Belki birisi bağlantıyı bilir?

+0

burada var [kod örneği 'slow_http_server.py'] (http://stackoverflow.com/a/32685765/4279) akılda tutulması gereken – jfs

cevap

10

Ben genellikle benim yerel makinenin 80 numaralı bağlantı noktasında dinleme Netcat'i kullanmak için zaman aşımı argümanını kullanabilirsiniz talep için zaman aşımını ayarlamak istiyorsanız:

nc -l 80 

Ardından, uygulamamdaki istek URL'si olarak http://localhost/ kullanıyorum. Netcat, http bağlantı noktasında yanıt verecek, ancak bir yanıt vermeyecek, bu nedenle, urllib2.urlopen() aramanızda bir zaman aşımı belirttiğiniz veya socket.setdefaulttimeout() numaralı telefonu arayarak talebinizin zaman aşımına uğraması garantilenir.

+0

eklendi urlopen için zaman aşımı argümanı çok hoş. Bunu hiç düşünmemiştim! –

+0

Kullanmak zorundaydım: nc -l -p 80 Harika bir fikir olsa! Teşekkürler. – mhost

+0

Evet, netcat'in eski sürümlerinde biraz farklı komut satırı seçenekleri var, IIRC. Memnun kaldım! –

0

neden sadece gerekli zaman aşımı süresi için uyuyor bash içinde çok basit bir CGI komut dosyası yazmıyorsunuz?

3
import socket 

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

her sen urlopen

+0

Bir şey sadece Python 2.6 – mhost

6

yukarıda gösterildiği gibi, varsayılan zaman aşımı ayarlayabilirsiniz, ancak bir karışımını kullanabilirsiniz hem urlopen yönteminde bir zaman aşımı seçeneği yoktur yılında Python 2.6 beri:

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 için varsayılan zaman aşımı sonsuzdur ve soket içe aktarma özelliği, zaman aşımını socket.timeout istisnası olarak yakalayabilmenizi sağlar

0

Mac üzerinde çalışıyorsanız, speedlimit çok iyi. Ayrıca, dummynet da bulunmaktadır. Çok daha sert ama aynı zamanda çok daha ilginç şeyler yapmanıza da izin veriyor. İşte bir pre-configured VM image.

Zaten bir Linux kutusunda çalışıyorsanız, netem var.

Ben TrafficShaper adlı bir Windows tabanlı bir araç duydum, ama ben doğrulamamış biri inanıyorum.

İlgili konular