2012-06-22 37 views
27

Tôi đang cố gắng xây dựng một công cụ để kiểm tra độ trễ kết nối internet của mình, cụ thể hơn là thời gian tải trang web. Tôi đã nghĩ đến việc sử dụng mô-đun python requests cho phần tải.Đo thời gian tải trang web bằng các yêu cầu Python

Vấn đề là, nó không có chức năng tích hợp để đo thời gian cần thiết để nhận được phản hồi đầy đủ. Đối với điều này tôi nghĩ rằng tôi sẽ sử dụng mô-đun timeit.

gì tôi không chắc chắn về là nếu tôi chạy timeit như vậy:

t = timeit.Timer("requests.get('http://www.google.com')", "import requests") 

tôi Tôi thực sự đo thời gian nó đã phản ứng đến hoặc là nó thời gian cần thiết cho yêu cầu được xây dựng, gửi, nhận, v.v ...? Tôi đoán tôi có thể bỏ qua thời gian truy tìm đó vì tôi đang thử nghiệm các mạng có độ trễ rất dài (~ 700ms)?

Có cách nào tốt hơn để thực hiện điều này theo chương trình không?

Trả lời

19

Đối với câu hỏi của bạn, nó phải là tổng thời gian cho

  1. thời gian để tạo ra các đối tượng yêu cầu
  2. Gửi yêu cầu
  3. Nhận phản ứng
  4. phản ứng Parse (Xem bình luận từ Thomas Orozco)

Các cách khác để đo thời gian tải yêu cầu duy nhất là sử dụng urllib:

nf = urllib.urlopen(url) 
start = time.time() 
page = nf.read() 
end = time.time() 
nf.close() 
# end - start gives you the page load time 
+5

+ 4. phân tích phản ứng HTTP –

+1

Đó trông thật sự tốt đẹp, nhưng nhìn một trong những ví dụ tôi thấy '1. start_timer = time.time() 2. Mở trình duyệt + đọc phản hồi 3. latency = time.time() - start_timer' Đây có phải là vấn đề tương tự không? – cookM

+0

@cookM: Tôi không thấy nó là vấn đề nhưng là một kinh nghiệm thời gian thực về độ trễ yêu cầu sẽ là gì. Trong thực tế, nó trung bình trên nhiều yêu cầu mà sẽ được gần gũi hơn với một thời gian thực tế. – pyfunc

105

Có chức năng như vậy trong phiên bản mới nhất của các yêu cầu:

http://docs.python-requests.org/en/latest/api/?highlight=elapsed#requests.Response.elapsed

Ví dụ:

requests.get("http://127.0.0.1").elapsed.total_seconds() 
+24

để có được thời gian phản ứng trong vài giây: 'requests.get (" http://127.0.0.1 ") .elapsed.total_seconds()' –

+1

Để thêm vào nhận xét của Micael Osl: 'total_seconds()' là một số thập phân có vẻ có độ chính xác micro giây. – Luc

+4

Không sử dụng điều này để lược tả và tối ưu hóa mã của bạn ở phía máy khách. Nó chỉ đo thời gian phản hồi của máy chủ (đó là câu hỏi OPs). _Thời gian trôi qua giữa việc gửi yêu cầu và sự xuất hiện của phản hồi (như là một timedelta). Thuộc tính này đo lường thời gian cụ thể giữa việc gửi byte đầu tiên của yêu cầu và hoàn tất phân tích cú pháp tiêu đề. Do đó, không bị ảnh hưởng bởi việc tiêu thụ nội dung phản hồi hoặc giá trị của đối số từ khóa luồng._ - tài liệu. – ChaimG

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