Hướng dẫn python requests connection timeout error - python yêu cầu kết nối lỗi thời gian chờ

Tôi đang xem http://docs.python-requests.org/en/latest/ và "thời gian chờ kết nối" được liệt kê như một tính năng. Tuy nhiên, khi tôi đọc thêm, nó tuyên bố

Thời gian chờ không phải là giới hạn thời gian trên toàn bộ phản hồi tải xuống; Thay vào đó, một ngoại lệ được nêu ra nếu máy chủ không đưa ra phản hồi cho thời gian chờ vài giây (chính xác hơn, nếu không có byte nào được nhận trên ổ cắm cơ bản trong thời gian chờ giây).

Điều đó không giống như một mô tả về thời gian chờ kết nối. Những gì tôi thấy là một kết nối thành công, nó tải lên một tệp lớn và sau đó chờ phản hồi. Tuy nhiên, phản hồi mất một lúc và sau đó là thời gian.

Làm thế nào tôi có thể đặt thời gian chờ kết nối, nhưng vẫn chờ phản hồi chậm một khi kết nối đã thành công? Cảm ơn rất nhiều.

hỏi ngày 16 tháng 7 năm 2014 lúc 15:25Jul 16, 2014 at 15:25

Hướng dẫn python requests connection timeout error - python yêu cầu kết nối lỗi thời gian chờ

1

Thư viện các yêu cầu (cho con người) có thời gian chờ kết nối, xem - https://requests.kennethreitz.org/en/master/user/advanced/#timeouts

r = requests.get('https://github.com', timeout=(3.05, 27))

# e.g. explicitly
conn_timeout = 6
read_timeout = 60
timeouts = (conn_timeout, read_timeout)
r = requests.get('https://github.com', timeout=timeouts)

Các tài liệu không chính xác rõ ràng về giá trị nào trong tuple, nhưng có thể an toàn khi cho rằng đó là thời gian chờ (connect, read).

Đã trả lời ngày 7 tháng 10 năm 2019 lúc 23:55Oct 7, 2019 at 23:55

Darren Weberdarren WeberDarren Weber

1.41919 Huy hiệu bạc20 Huy hiệu đồng19 silver badges20 bronze badges

2

Thời gian chờ được sử dụng cho cả giai đoạn kết nối ổ cắm và giai đoạn đọc phản hồi. Ngoại lệ duy nhất là các yêu cầu được truyền phát; Nếu bạn đặt stream=True, thời gian chờ không thể được áp dụng cho phần đọc. Thời gian chờ thực sự được sử dụng chỉ để chờ đợi ổ cắm kết nối hoặc dữ liệu được nhận.

Nếu bạn cần một thời gian chờ tổng thể, thì hãy sử dụng một kỹ thuật khác, như sử dụng các ngắt hoặc sự kiện: thời gian chờ cho các yêu cầu python.

Đã trả lời ngày 16 tháng 7 năm 2014 lúc 15:28Jul 16, 2014 at 15:28

Martijn Pieters ♦ Martijn PietersMartijn Pieters

994K277 Huy hiệu vàng3915 Huy hiệu bạc3258 Huy hiệu đồng277 gold badges3915 silver badges3258 bronze badges

1

Trong hướng dẫn này, bạn sẽ học cách sử dụng thời gian chờ trong thư viện Python yêu cầu, khi làm việc với bất kỳ loại yêu cầu HTTP nào được thực hiện. Theo mặc định, thư viện requests sẽ không hết thời gian bất kỳ yêu cầu nào bạn thực hiện, điều này có thể dẫn đến việc lập trình của bạn chạy vô thời hạn nếu một máy chủ không phản hồi.you’ll learn how to use timeouts in the Python requests library, when working with any type of HTTP request being made. By default, the requests library will not time out any request you make, which can result in your programming running indefinitely if a server doesn’t respond.

Đến cuối hướng dẫn này, bạn sẽ học được:

  • Cách đặt thời gian chờ trong các yêu cầu
  • Cách đặt thời gian chờ duy nhất để kết nối và đọc trong các yêu cầu Python
  • Cách bắt và xử lý các lỗi thời gian chờ trong các yêu cầu Python

Làm thế nào để Python yêu cầu xử lý thời gian chờ?

Theo mặc định, thư viện Python yêu cầu không đặt thời gian chờ cho bất kỳ yêu cầu nào mà nó gửi. Điều này đúng với các yêu cầu GET,

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
0 và
# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
1. Mặc dù điều này có thể ngăn ngừa các lỗi bất ngờ, nhưng nó có thể dẫn đến yêu cầu của bạn chạy vô thời hạn.
the Python requests library does not set a timeout for any request it sends. This is true for GET,
# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
0, and
# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
1 requests. While this can prevent unexpected errors, it can result in your request running indefinitely.

Bởi vì điều này, điều quan trọng là thiết lập thời gian chờ để ngăn chặn hành vi bất ngờ. Hãy nhớ rằng, thư viện Python requests sẽ không thời gian chờ theo mặc định, trừ khi được hướng dẫn rõ ràng.Remember, the Python requests library will not timeout by default, unless explicitly instructed.

Cách đặt thời gian chờ cho các yêu cầu Python

Để đặt thời gian chờ trong yêu cầu HTTP được thực hiện thông qua thư viện requests, bạn có thể sử dụng tham số

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
4. Tham số chấp nhận một số nguyên hoặc giá trị điểm nổi, mô tả thời gian tính bằng giây.. The parameter accepts either an integer or a floating point value, which describes the time in seconds.

Điều quan trọng cần lưu ý là hành vi này khác với nhiều thư viện yêu cầu HTTP khác, chẳng hạn như các thư viện trong JavaScript. Trong các thư viện hoặc ngôn ngữ khác, hành vi này có xu hướng được thể hiện bằng mili giây.

Hãy cùng xem một ví dụ về cách chúng ta có thể gửi yêu cầu GET với thời gian chờ:

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)

Trong ví dụ trên, chúng tôi đặt thời gian chờ 3 giây. Chúng tôi đã sử dụng một số nguyên để thể hiện thời gian của thời gian chờ của chúng tôi. Nếu chúng ta muốn chính xác hơn, chúng ta cũng có thể vượt qua giá trị điểm nổi:

# Setting a Timeout on a GET Request with a Floating Point Value
import requests
resp = requests.get('https://datagy.io', timeout=3.5)

Bằng cách chuyển một giá trị duy nhất, chúng tôi đặt thời gian chờ cho yêu cầu. Nếu chúng tôi muốn đặt thời gian chờ khác nhau để kết nối và đọc yêu cầu, chúng tôi có thể vượt qua trong một bộ phận giá trị.

Cách đặt thời gian chờ để kết nối và đọc trong các yêu cầu Python

Trong một số trường hợp, bạn sẽ muốn đặt thời gian chờ khác nhau để tạo kết nối và để đọc kết quả. Điều này có thể dễ dàng được thực hiện bằng cách sử dụng tham số

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
4 trong thư viện requests. Tương tự như ví dụ trên, điều này có thể được áp dụng cho bất kỳ loại yêu cầu nào được thực hiện.

Hãy để xem cách chúng ta có thể vượt qua các giới hạn thời gian chờ khác nhau để kết nối và đọc các yêu cầu trong thư viện Python requests:

# Setting Different Timeouts for Connecting and Reading Requests
import requests
resp = requests.get('https://datagy.io', timeout=(1, 2))

Trong ví dụ trên, chúng tôi đặt yêu cầu thành thời gian chờ sau 1 giây để kết nối và 2 giây để đọc yêu cầu.

Trong phần sau, bạn sẽ học cách bắt và xử lý các lỗi phát sinh do hết thời gian.

Cách bắt và xử lý các lỗi thời gian chờ trong các yêu cầu Python

Khi áp dụng thời gian chờ, điều quan trọng cần lưu ý là đây không phải là giới hạn thời gian cho toàn bộ phản hồi. Thay vào đó, nó làm tăng một ngoại lệ nếu không có byte nào được nhận trên ổ cắm cơ bản.it’s important to note that this is not a time limit on the entire response. Instead, it raises an exception if no bytes have been received on the underlying socket.

Nếu yêu cầu không nhận được bất kỳ byte nào trong giới hạn

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
4 được chỉ định, lỗi
# Setting a Timeout on a GET Request with a Floating Point Value
import requests
resp = requests.get('https://datagy.io', timeout=3.5)
0 sẽ được nêu ra. Hãy để xem những gì nó trông như thế nào:

# Raising a Timeout Error in a Python requests GET Request
import requests
resp = requests.get('https://datagy.io', timeout=0.0001)

# Raises:
# ConnectTimeoutError(, 'Connection to datagy.io timed out. (connect timeout=0.0001)')

Để ngăn chặn chương trình của bạn bị sập, bạn cần xử lý ngoại lệ bằng cách sử dụng khối

# Setting a Timeout on a GET Request with a Floating Point Value
import requests
resp = requests.get('https://datagy.io', timeout=3.5)
1. Hãy để xem cách làm điều này có thể được thực hiện:

# Handling a Timeout Error
import requests
from requests.exceptions import ConnectTimeout

try:
    requests.get('https://datagy.io', timeout=0.0001)
except ConnectTimeout:
    print('Request has timed out')

# Returns:
# Request has timed out

Chúng ta có thể thấy trong mã ở trên rằng lỗi đã được xử lý an toàn. Để làm điều này, chúng tôi:

  1. Đã nhập lỗi từ mô -đun ngoại lệ của thư viện requests
  2. Chúng tôi đã tạo một khối
    # Setting a Timeout on a GET Request with a Floating Point Value
    import requests
    resp = requests.get('https://datagy.io', timeout=3.5)
    1 để xử lý lỗi
    # Setting a Timeout on a GET Request with a Floating Point Value
    import requests
    resp = requests.get('https://datagy.io', timeout=3.5)
    4.

Các câu hỏi thường gặp

Thời gian chờ mặc định cho các yêu cầu Python là gì?

Không có. Không có thời gian chờ mặc định cho các yêu cầu Python, trừ khi được đặt rõ ràng bằng tham số

# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
4.There is no default timeout for Python requests, unless explicitly set using the
# Setting a Timeout on a GET Request with an Integer
import requests
resp = requests.get('https://datagy.io', timeout=3)
4 parameter.

Làm thế nào để bạn đặt thời gian chờ cho các yêu cầu được thực hiện trong Python?

Bạn đặt thời gian chờ (tính bằng giây) bằng tham số

# Setting a Timeout on a GET Request with a Floating Point Value
import requests
resp = requests.get('https://datagy.io', timeout=3.5)
6 khi thực hiện các yêu cầu HTTP trong thư viện yêu cầu Python.

Thời gian tốt nhất để đặt thời gian chờ cho các yêu cầu được thực hiện trong Python là gì?

Mặc dù không có giá trị được thiết lập tốt nhất cho thời gian chờ cho các yêu cầu HTTP được thực hiện trong Python, nhưng một thực tế tốt là đặt chúng dưới 500ms. Điều này cho phép ứng dụng của bạn cung cấp trải nghiệm người dùng tốt hơn và xử lý nhiều yêu cầu hơn.

Sự kết luận

Trong hướng dẫn này, bạn đã học cách xử lý thời gian chờ trong thư viện Python requests. Trước tiên bạn đã học cách thư viện Python requests xử lý thời gian chờ. Sau đó, bạn đã học cách đặt thời gian chờ khi thực hiện các yêu cầu HTTP, cả sử dụng số nguyên và giá trị điểm nổi. Sau đó, bạn đã học cách chỉ định thời gian chờ cụ thể để kết nối và đọc các yêu cầu. Cuối cùng, bạn đã học được cách xử lý các ngoại lệ thời gian chờ trong thư viện Python requests.

Tài nguyên bổ sung

Để tìm hiểu thêm về các chủ đề liên quan, hãy xem các hướng dẫn dưới đây:

  • Đối tượng phản hồi yêu cầu Python được giải thích
  • Tiêu đề yêu cầu Python đã giải thích
  • Phiên yêu cầu Python được giải thích
  • Tài liệu chính thức: Python yêu cầu thời gian chờ

Làm thế nào để bạn sửa lỗi thời gian chờ trong Python?

Làm thế nào để bạn khắc phục sự cố thời gian chờ?..
Giải pháp 1: Khởi động lại kết nối Internet của bạn ..
Giải pháp 2: Tắt tường lửa và phần mềm chống vi -rút của bạn ..
Giải pháp 3: Tắt cài đặt máy chủ proxy hoặc VPN ..
Giải pháp 4: Xóa bộ đệm của trình duyệt ..
Giải pháp 5: Thay đổi máy chủ DNS ..
Giải pháp 6: Xóa và gia hạn DNS ..

Làm thế nào để bạn vượt qua thời gian chờ trong yêu cầu Python?

Để đặt thời gian chờ trong các yêu cầu Python, bạn có thể vượt qua tham số "Hết thời gian" để nhận, đăng, đặt, đầu và xóa các phương thức. Tham số "Thời gian chờ" cho phép bạn chọn thời gian tối đa (số giây) để hoàn thành yêu cầu. Theo mặc định, các yêu cầu không có thời gian chờ trừ khi bạn chỉ định rõ ràng một.pass the "timeout" parameter for GET, POST, PUT, HEAD, and DELETE methods. The "timeout" parameter allows you to select the maximum time (number of seconds) for the request to complete. By default, requests do not have a timeout unless you explicitly specify one.

Thời gian chờ mặc định cho các yêu cầu Python là gì?

Thời gian chờ mặc định cho các yêu cầu Python là gì?Không có.Không có thời gian chờ mặc định cho các yêu cầu Python, trừ khi được đặt rõ ràng bằng tham số thời gian chờ.There is no default timeout for Python requests, unless explicitly set using the timeout parameter.

Làm thế nào để bạn xử lý thời gian chờ yêu cầu?

Thời gian chờ có thể dễ dàng được thêm vào URL bạn đang yêu cầu.Nó xảy ra rằng, bạn đang sử dụng URL của bên thứ ba và chờ phản hồi.Luôn luôn là một thực tế tốt để cung cấp thời gian chờ trên URL, vì chúng tôi có thể muốn URL phản hồi trong thời gian là một phản hồi hoặc lỗi.. It so happens that, you are using a third-party URL and waiting for a response. It is always a good practice to give a timeout on the URL, as we might want the URL to respond within a timespan with a response or an error.