2010-11-15 19 views
5

Tôi muốn kiểm tra việc xử lý thời gian chờ của ứng dụng khi lấy dữ liệu qua urllib2 và tôi muốn có một số cách để buộc yêu cầu hết thời gian chờ.Tôi có thể buộc urllib2 mất thời gian như thế nào?

Không tìm được kết nối internet rất chậm, tôi có thể sử dụng phương pháp nào?

Tôi dường như nhớ một ứng dụng/bộ ứng dụng thú vị để mô phỏng những thứ này. Có lẽ ai đó biết liên kết?

+0

đây là [ví dụ mã của 'slow_http_server.py'] (http://stackoverflow.com/a/32685765/4279) – jfs

Trả lời

10

Tôi thường sử dụng netcat lắng nghe trên cổng 80 của máy tính cục bộ của tôi:

nc -l 80 

Sau đó, tôi sử dụng http://localhost/ làm URL yêu cầu trong ứng dụng của mình. Netcat sẽ trả lời tại cổng http nhưng sẽ không bao giờ trả lời, do đó yêu cầu được đảm bảo về thời gian miễn là bạn đã chỉ định thời gian chờ trong cuộc gọi urllib2.urlopen() hoặc gọi socket.setdefaulttimeout().

+0

rất đẹp. không bao giờ nghĩ về điều đó! –

+0

Tôi đã phải sử dụng: nc -l -p 80 Ý tưởng tuyệt vời! Cảm ơn. – mhost

+0

Vâng, các phiên bản cũ của netcat có các tùy chọn dòng lệnh hơi khác nhau, IIRC. Vui mừng nó đã làm việc! –

0

tại sao không viết một script CGI rất đơn giản trong bash chỉ ngủ trong khoảng thời gian chờ yêu cầu?

3
import socket 

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

Nếu bạn muốn thiết lập thời gian chờ cho mỗi yêu cầu bạn có thể dùng tham số thời gian chờ cho urlopen

+0

Một điều cần lưu ý là đối số hết thời gian cho urlopen chỉ được thêm vào trong Python 2.6 – mhost

6

Bạn có thể thiết lập thời gian chờ mặc định như trên, nhưng bạn có thể sử dụng một kết hợp của cả hai kể từ Python 2.6 trong đó là một lựa chọn thời gian chờ trong phương pháp 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!" 

Thời gian chờ mặc định cho urllib2 là vô hạn và ổ cắm nhập đảm bảo rằng bạn sẽ bắt được thời gian chờ là ngoại lệ socket.timeout

0

Nếu bạn đang chạy trên máy Mac, speedlimit rất tuyệt.

Ngoài ra còn có dummynet. Đó là rất nhiều hardcore, nhưng nó cũng cho phép bạn làm một số điều thú vị hơn rất nhiều. Đây là pre-configured VM image.

Nếu bạn đang chạy trên hộp Linux, có netem.

Tôi tin rằng tôi đã nghe nói về một công cụ dựa trên Windows được gọi là TrafficShaper, nhưng đó là một trong những tôi đã không xác minh.

Các vấn đề liên quan