Làm cách nào để hết thời gian chờ trong python?

Yêu cầu là tiêu chuẩn thực tế khi thực hiện các yêu cầu HTTP trong Python, đặc biệt là kể từ Python 3. Thư viện nguồn mở tóm tắt sự phức tạp của việc quản lý các kết nối mạng và giúp việc gửi các yêu cầu HTTP trở nên dễ dàng

Hầu hết các bạn có thể đã biết cách gửi HTTP POST, GET, cũng như các loại yêu cầu HTTP khác. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách đặt thời gian chờ trong requests, cũng như quản lý các trường hợp ngoại lệ

Nội dung ẩn

1 Hết thời gian chờ trong yêu cầu Python

2 Bắt ngoại lệ hết thời gian chờ

3 Xử lý thời gian chờ nâng cao

4 Hết thời gian yêu cầu trong các coroutine không đồng bộ

Hết thời gian chờ trong yêu cầu Python

Bạn có thể yêu cầu thư viện requests dừng chờ phản hồi sau một khoảng thời gian nhất định bằng cách chuyển một số đến tham số timeout. Nếu thư viện requests không nhận được phản hồi sau 11 giây, nó sẽ báo lỗi 12

Cách tốt nhất là mã sản xuất nên sử dụng tham số này trong tất cả các yêu cầu mạng. Không làm như vậy có thể khiến chương trình của bạn bị treo vô thời hạn. Nếu không có timeout nào được chỉ định rõ ràng, các yêu cầu sẽ không hết thời gian chờ

requests.get['//example.com/', timeout=10] # OUTPUT Traceback [most recent call last]: File "", line 1, in requests.exceptions.Timeout: HTTPConnectionPool[host='example.com', port=80]: Request timed out. [timeout=10]

Code language: PHP [php]

Bắt ngoại lệ hết thời gian chờ

Khi giá trị thời gian chờ đã được đặt, mọi yêu cầu không nhận được phản hồi trong khung thời gian đã chỉ định sẽ gây ra lỗi

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]
2. Điều quan trọng là phải xử lý ngoại lệ này, nếu không chương trình của bạn sẽ bị chấm dứt

Để bắt lỗi

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]
2 trong requests, bạn phải tự nhập ngoại lệ bằng cách sử dụng

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]
4

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]

Xử lý thời gian chờ nâng cao

Hầu hết các yêu cầu đến các máy chủ bên ngoài phải có thời gian chờ kèm theo, trong trường hợp máy chủ không phản hồi kịp thời. Theo mặc định, các yêu cầu không hết thời gian trừ khi giá trị thời gian chờ được đặt rõ ràng. Nếu không có thời gian chờ, mã của bạn có thể bị treo trong vài phút hoặc hơn

Thời gian chờ kết nối là số giây Yêu cầu sẽ đợi máy khách của bạn thiết lập kết nối với máy từ xa [tương ứng với lệnh gọi connect[]] trên ổ cắm. Đó là một cách tốt để đặt thời gian chờ kết nối lớn hơn một chút so với bội số của 3, đây là cửa sổ truyền lại gói TCP mặc định

Khi máy khách của bạn đã kết nối với máy chủ và gửi yêu cầu HTTP, thời gian chờ đọc là số giây mà máy khách sẽ đợi máy chủ gửi phản hồi. [Cụ thể, đó là số giây mà máy khách sẽ đợi giữa các byte được gửi từ máy chủ. Năm 99. 9% trường hợp, đây là thời gian trước khi máy chủ gửi byte đầu tiên]

Nếu bạn chỉ định một giá trị duy nhất cho thời gian chờ, như thế này

r = requests.get['//github.com', timeout=5]

Code language: JavaScript [javascript]

Giá trị thời gian chờ sẽ được áp dụng cho cả thời gian chờ của

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]
5 và

import requests from requests.exceptions import Timeout try: requests.get['//www.example.com, timeout=10] except Timeout: print['Timeout has been raised.']

Code language: PHP [php]
6. Chỉ định một bộ nếu bạn muốn đặt các giá trị riêng biệt

r = requests.get['//github.com', timeout=[3.05, 27]]

Code language: JavaScript [javascript]

Yêu cầu thời gian chờ trong quy trình không đồng bộ

Vì có rất nhiều người mới bắt đầu hỏi cách sử dụng requests trong các chương trình hoặc coroutine không đồng bộ, nên chúng tôi đã tạo phần này dành riêng để trả lời câu hỏi đó.

requests là một thư viện chặn, có nghĩa là nó không nên được sử dụng trong các coroutine không đồng bộ. Các thư viện thích hợp để sử dụng trong ngữ cảnh này là aiohttp và async-timeout. aiohttp là khung máy khách/máy chủ HTTP không đồng bộ, trong khi async-timeout là trình quản lý bối cảnh thời gian chờ tương thích với asyncio có thể được sử dụng để bọc bất kỳ coroutine nào bên trong trình quản lý bối cảnh “hết thời gian chờ”

Tại sao mã Python của tôi hết thời gian chờ?

Lý do tạo thời gian chờ là do chương trình đang cố viết 50000 tài liệu cùng một lúc , SDK Python có giá trị mặc định . 5 giây. Có một vài lựa chọn ở đây. Tăng thời gian chờ.

Thời gian chờ yêu cầu là gì?

Mã trạng thái phản hồi Hết thời gian chờ yêu cầu của Giao thức truyền siêu văn bản [HTTP] 408 có nghĩa là máy chủ muốn tắt kết nối không sử dụng này . Nó được gửi trên một kết nối nhàn rỗi bởi một số máy chủ, ngay cả khi không có bất kỳ yêu cầu nào trước đó của máy khách.

Chủ Đề