---
title: "如何使用 Python requests 库的超时设置"
description: "通过示例、重试机制和日志记录，学习如何在 Python 的 requests 库中设置和处理超时，避免应用程序卡死。"
url: "https://marsproxies.cn/blog/python-requests-timeout/"
---

- [EN ](https://marsproxies.com/blog/python-requests-timeout/ "英语")
  [CN](https://marsproxies.cn/blog/python-requests-timeout/ "语言切换器")

[联系销售](https://marsproxies.cn/contact-sales/) [注册](https://dashboard.marsproxies.com/register/) [登录](https://dashboard.marsproxies.com/login/)

[联系销售](https://marsproxies.cn/contact-sales/) [注册](https://dashboard.marsproxies.com/register/) [登录](https://dashboard.marsproxies.com/login/)

[联系销售](https://marsproxies.cn/contact-sales/)

[登录](https://dashboard.marsproxies.com/login/) [注册](https://dashboard.marsproxies.com/register/)

- [EN ](https://marsproxies.com/blog/python-requests-timeout/ "英语")
  [CN](https://marsproxies.cn/blog/python-requests-timeout/ "语言切换器")

[返回博客](https://marsproxies.cn/blog/) 2025年5月22日

# 掌握 Python 请求超时设置：提升请求效果的实用技巧

[资讯](https://marsproxies.cn/blog/category/insights/)

\-

目录

1. [配置 Python 环境](https://marsproxies.cn/blog/python-requests-timeout/#b-%E9%85%8D%E7%BD%AE-python-%E7%8E%AF%E5%A2%83)
2. [Python requests 库中的超时是什么](https://marsproxies.cn/blog/python-requests-timeout/#b-python-requests-%E5%BA%93%E4%B8%AD%E7%9A%84%E8%B6%85%E6%97%B6%E6%98%AF%E4%BB%80%E4%B9%88)
3. [如何在 Python Requests 库中设置超时](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A6%82%E4%BD%95%E5%9C%A8-python-requests-%E5%BA%93%E4%B8%AD%E8%AE%BE%E7%BD%AE%E8%B6%85%E6%97%B6)
4. [设置元组形式的超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%85%83%E7%BB%84%E5%BD%A2%E5%BC%8F%E7%9A%84%E8%B6%85%E6%97%B6%E5%80%BC)
5. [处理 POST 请求](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A4%84%E7%90%86-post-%E8%AF%B7%E6%B1%82)
6. [处理超时异常](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A4%84%E7%90%86%E8%B6%85%E6%97%B6%E5%BC%82%E5%B8%B8)
7. [超时管理的最佳实践](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%B6%85%E6%97%B6%E7%AE%A1%E7%90%86%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5)
8. [使用超时参数](https://marsproxies.cn/blog/python-requests-timeout/#b-%E4%BD%BF%E7%94%A8%E8%B6%85%E6%97%B6%E5%8F%82%E6%95%B0)
9. [设置合适的超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%90%88%E9%80%82%E7%9A%84%E8%B6%85%E6%97%B6%E5%80%BC)
10. [设置全局超时](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%85%A8%E5%B1%80%E8%B6%85%E6%97%B6)
11. [监控并调整超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E7%9B%91%E6%8E%A7%E5%B9%B6%E8%B0%83%E6%95%B4%E8%B6%85%E6%97%B6%E5%80%BC)
12. [常见的超时问题及应对方法](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%B8%B8%E8%A7%81%E7%9A%84%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%8F%8A%E5%BA%94%E5%AF%B9%E6%96%B9%E6%B3%95)
13. [未设置超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E6%9C%AA%E8%AE%BE%E7%BD%AE%E8%B6%85%E6%97%B6%E5%80%BC)
14. [异常处理不当](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E4%B8%8D%E5%BD%93)
15. [超时设置过于激进](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%B6%85%E6%97%B6%E8%AE%BE%E7%BD%AE%E8%BF%87%E4%BA%8E%E6%BF%80%E8%BF%9B)
16. [结语](https://marsproxies.cn/blog/python-requests-timeout/#b-%E7%BB%93%E8%AF%AD)

\-

所有调用外部资源的 Python 应用程序都会面临服务器宕机的问题：如果应用程序用于获取数据的外部服务器出现故障，而您又没有设置 Python 请求超时参数，应用程序就可能因此卡死。

为避免这种情况，本文将介绍如何设置连接超时和读取超时，并处理可能出现的问题。读完本文后，您将了解超时错误的原理，以及在不同场景下应如何设置合适的超时值，以获得理想的性能表现。

如果您正在[使用 Python 进行数据抓取](https://marsproxies.cn/blog/python-web-scraping/)，那么设置 Python 请求超时参数可以防止您的爬虫因某个无响应的服务器而卡住。

## 配置 Python 环境

要在应用程序中使用超时参数，您需要完成三项准备工作：首先，根据您的操作系统[下载 Python](https://www.python.org/downloads/)并安装（如果尚未安装），然后安装 Python Requests 库。

打开终端，输入以下命令。

```javascript
python -m pip install requests
```

如果您使用的是 Python 3，请改用以下命令。

```javascript
python3 -m pip install requests
```

第三步是可选的，但我们建议您使用集成开发环境（IDE）编写代码，例如 Microsoft 的 Visual Studio Code，或专为 Python 设计的 PyCharm。

## Python requests 库中的超时是什么

“连接超时”错误是连接超时的典型例子，它表示服务器未能响应您的[浏览器](https://marsproxies.cn/blog/browser-vision/)。当浏览器与无响应的服务器通信一段时间后，就会提示超时错误。浏览器等待服务器响应的这段时间间隔，就是超时参数。

Python Requests 库支持设置两种超时参数：连接超时参数用于定义应用程序尝试连接服务器的最长时间，而读取超时则是应用程序等待服务器返回所请求数据的时间间隔。您也可以只设置一个超时参数，让它同时作为连接超时和读取超时的值。

## 如何在 Python Requests 库中设置超时

设置超时值能显著提升应用程序的性能：一方面，它可以快速提示您或用户连接出现了问题；另一方面，假如应用程序一直在循环尝试连接一个无响应的服务器，就会不断消耗设备资源（CPU 时间、网络套接字、已分配内存等）却徒劳无功。

在进行数据抓取时，处理连接超时错误尤为重要，因为您的应用程序需要访问数十个服务器。如果因某次连接失败而卡住，爬虫的运行速度就会变慢，抓取到的数据也会比预期少。

接下来，我们将演示如何使用 Visual Studio Code 为 GET HTTP 请求设置超时参数。首先，新建一个 Python 文件，并保存到您选择的位置，别忘了在文件名末尾加上 .py 扩展名，以确保在 Python 环境中执行。

在新打开的文件中，粘贴以下代码。

```python
import requests
res = requests.get(
 "https://marsproxies.com/proxies/residential-proxies/" ,
timeout= 10
)
print (res.text)
```

如果需要指定具体路径，请使用以下命令。假设您将文件保存在 C:\Users\Jane\LearnPython 目录下，则输入这行命令。

```javascript
cd C :\Users\Jane\LearnPython
```

终端现在已经切换到您保存文件的目录，您可以使用以下命令执行代码。

```javascript
Python filename.py
```

我们已经成功抓取了[住宅代理](https://marsproxies.cn/proxies/residential-proxies/)落地页的完整 HTML 文档。现在让我们稍微调整一下，将 GET 请求的超时时间设置为极短的 0.001 秒。

终端现在显示 readtimeout 错误

```typescript
requests.exceptions.ReadTimeout: HTTPSConnectionPool (host= 'marsproxies.com' , port= 443 ) : Read timed out. (read timeout= 0.001 )
```

虽然初始连接成功了，但 0.001 秒远远不足以从服务器抓取并返回所需的数据。这同时也说明，设置过短的超时时间并不可取，因为服务器根本来不及及时满足客户端的请求。

## 设置元组形式的超时值

大多数情况下，您需要同时设置连接超时和读取超时这两个值，以避免因参数设置不当而引发超时异常错误。

例如，您可能希望将连接超时设置得短一些，比如 1 到 3 秒，以避免应用程序反复尝试连接一个已离线的服务器。但对于需要收集在线数据的 HTTP 请求来说，几秒钟可能并不够用，尤其是当数据还[包含图片](https://marsproxies.cn/blog/image-scraper/)和视频内容时。这种情况下，您可以用以下代码分别为这两种场景设置连接超时。

```python
import requests
res = requests.get(
 "https://marsproxies.com/proxies/residential-proxies/" ,
   timeout= ( 1 , 5 )
)
print (res.text)
```

可以看到，Python 的语法让同时设置两种超时变得非常简单：只需在超时参数中填入连接和读取的值，并用逗号隔开即可。

请注意，超时值默认是未定义的，这意味着如果您不特意设置，应用程序在发送 GET、POST 等请求时会无限期地卡住。

## 处理 POST 请求

前面我们演示了如何为 GET HTTP 请求设置超时值，但实际上您也会经常用到 POST 请求，例如需要登录某个网站才能获取所需数据。

首先，请查阅[合乎道德的数据抓取准则](https://marsproxies.cn/blog/is-web-scraping-legal/)，确保不会抓取受密码保护的个人身份信息或受版权保护的内容。确认一切合规后，可参考以下代码示例来处理 POST 请求。

```python
import requests
res = requests.post(
"https://dashboard.marsproxies.com/login/" ,
 data= { "username" : "test" , "password" : "pass" } ,
 timeout= 10
)
print (res.text)
```

请注意，实现登录功能需要编写更复杂的代码来处理[CSRF 令牌](https://stackoverflow.com/questions/5207160/what-is-a-csrf-token-what-is-its-importance-and-how-does-it-work/)以及维持登录状态所需的 Cookie。不过，上面的代码片段仅展示了如何为 POST HTTP 请求设置超时限制。

## 处理超时异常

设置超时限制固然重要，但处理超时错误同样不可忽视。首先，您需要清楚问题的根源——在成百上千行终端输出中逐条查找读取超时信息效率很低。请使用以下代码来指定错误信息。

```python
import requests
try :
 res = requests.get(
  "https://marsproxies.com/proxies/residential-proxies/" ,
timeout= 0.001
    )
 print (res.text)
except requests.Timeout as e:
  print (e)
```

这里我们设置了一个极低的数值，用来演示超时是如何发生的。实际使用中，您会为服务器获取数据设置更长的最长等待时间。来看看终端中发生了什么。

现在不再显示几十行输出，而是用一行代码就能指明问题所在。让我们再做些自定义，把 'print(e)' 这部分改成以下内容。

```python
print ( "The request failed due to slow server responses." )
```

括号内的内容可以随意填写，这样就能为每个请求指定错误信息，方便您快速定位问题根源。另外请注意，我们还改用了 'try' 和 'except' 语句，这是处理超时问题的一种常见且高效的方式。

## 超时管理的最佳实践

现在的大多数应用程序都会与外部数据库和 API 通信，以获取更丰富的内容，但这也让它们更容易受到临时网络问题的影响。如果超时设置不当，应用程序常常会卡死或崩溃，导致用户流失。以下是解决此类问题的几点建议。

### 使用超时参数

这一点虽然显而易见，但有些开发者还是会忽略：默认情况下超时是没有限制的。因此应用程序可能一开始运行得很好，直到某次超时发生——随后应用程序会无限循环执行失败的请求方法，直到根本问题得到解决，这可能导致应用程序卡死甚至崩溃。

### 设置合适的超时值

在前面的示例中，我们设置了极低的超时值，以便演示错误是如何发生的，但在实际应用中不建议这样做。通常连接超时值会比读取超时值短，因为连接服务器的速度远快于从服务器抓取数据的速度。

具体的超时参数在很大程度上取决于网络结构、目标数据大小、您所在的地理位置、服务器软硬件配置等因素。以下超时值仅供参考，帮助您大致了解设置范围。

- **数据抓取。**&#x5C06;连接超时设置为 1 到 5 秒、读取超时设置为 5 到 30 秒，可以为爬虫抓取数据留出充足时间。您还可以实现重试机制，每次重试时将读取超时值增加几秒钟，以应对临时性的网络问题。
- **API**：API 通常是更快速、更可靠的数据交换方式。此时可将连接超时设置为 1 到 3 秒、读取超时设置为 2 到 10 秒，如果请求的数据量较小，还可以适当调低这些数值。
- **内部数据库。**&#x4E0E;同一网络内的资源通信时，可以将连接超时设置为较低的 1 秒、读取超时设置为 1 到 3 秒，从而加快应用程序的响应速度。

### 设置全局超时

有时您可能需要为应用程序发出的所有网络请求设置一个全局超时值，这时可以使用 requests.Session() 对象，为每个 HTTP 请求指定所需的参数。

例如，Session 对象常用于管理 Cookie，让后续每个请求都自动携带 Cookie，从而保持用户的登录状态。下面是一个设置全局超时值的简单代码示例。

```python
import requests
session = requests.Session( )
session.timeout = 5
try :
 res = session.get( "https://marsproxies.com/" )
    print ( f"Success:  {res.status_code} " )
except requests.exceptions.Timeout:
   print ( "Failed: Timed out" )
try :
res = session.get( "https://marsproxies.com/proxies/residential-proxies/" )
    print ( f"Success:  {res.status_code} " )
except requests.exceptions.Timeout:
    print ( "Failed: Timed out" )
```

在这个示例中，我们设置了 5 秒的全局超时，并向我们网站的两个页面分别发送了 GET 请求。结果会打印出连接成功时的 200 状态码，或是 'Failed: Timed out' 错误提示。

### 监控并调整超时值

定期检查应用程序的性能表现，有助于发现已有或潜在的问题。建议您定义 P95 和 P99 延迟百分位：前者表示 95% 的请求能在该时长内完成，后者表示 99% 的请求能在该时长内完成。更稳妥的做法是，将超时值设置得略高于这两个数值，为正常的网络波动留出一些余地。

## 常见的超时问题及应对方法

虽然设置超时相对简单，但您仍可能遇到一些问题。以下是三种需要了解的常见场景。

### 未设置超时值

最明显的问题是完全没有设置超时。正如我们之前所说，默认值是未定义的，因此您的应用会无限期地持续发出 HTTP 请求，消耗资源、拖慢速度，甚至导致崩溃。

### 异常处理不当

即使正确设置了超时，您的应用仍可能出现卡顿或停机。请仔细检查是否在 try 和 except 代码块中正确设置了异常，同时请使用 requests.exceptions 函数来识别并解决错误。

### 超时设置过于激进

将超时设置得过短看似能让应用运行得更快，但这往往会产生虚假的服务器宕机误报。如果将读取超时设为 0.01，应用会无法获取数据——这并非因为无法连接到服务器，而是因为没有足够的时间来接收信息。

## 结语

在本指南中，您已学会使用 GET 或 POST 请求方法设置超时值。此外，我们还简要介绍了如何处理超时异常。如果您觉得本指南有帮助，请持续关注我们的博客，我们将持续更新[Python 数据](https://marsproxies.cn/blog/python-data-normalization-complete-guide/)相关内容，例如如何编写重试请求。

考虑在性能关键型请求中切换编程语言？我们的[Go 与 Python 对比](https://marsproxies.cn/blog/golang-vs-python/)文章详细分析了各自的优势。另外，也可以查看我们关于[HTTPX 与 Requests 与 AIOHTTP 对比](https://marsproxies.cn/use-cases/httpx-vs-requests-vs-aiohttp/)的文章。

如果您使用超时来抓取在线数据，我们还建议您查看我们的网络数据抓取指南。此外，如果您有建议或想向我们的代理专家提问，欢迎加入日益壮大的[Discord 社区](https://discord.gg/6Q6cjSmb/)。

Requests 中的超时是什么？

Python Requests 库中的超时是一个参数，用于定义应用程序等待服务器响应的最长时间。连接超时是指建立与服务器连接所需的时间；而读取超时则定义了服务器响应的最长等待时长。

为什么在 HTTP 请求中设置超时很重要？

由于初始超时参数未定义，如果不手动设置超时，您的应用可能会在连接失败时陷入循环。应用可能会无限期地尝试连接服务器或等待响应，从而浪费资源，甚至导致崩溃。

连接超时与读取超时有什么区别？

连接超时定义了应用尝试连接服务器的最长时间，读取超时则指定了应用等待服务器响应的最长时间。

Python 中的默认超时是多少？

Python 中的默认超时是未定义的，这意味着它会无限期地持续下去。

可以为所有请求设置默认超时吗？

可以，您可以使用 requests.Session() 对象为所有请求设置全局超时。这样，会话的超时参数会应用于所有请求，但单个请求的设置值仍可覆盖该全局设置。

[了解更多](https://dashboard.marsproxies.com/register/)

\-

作者

[Dalius Pamedytis 软件工程师](https://marsproxies.cn/blog/authors/dalius-pamedytis/)

目录

1. [配置 Python 环境](https://marsproxies.cn/blog/python-requests-timeout/#b-%E9%85%8D%E7%BD%AE-python-%E7%8E%AF%E5%A2%83)
2. [Python requests 库中的超时是什么](https://marsproxies.cn/blog/python-requests-timeout/#b-python-requests-%E5%BA%93%E4%B8%AD%E7%9A%84%E8%B6%85%E6%97%B6%E6%98%AF%E4%BB%80%E4%B9%88)
3. [如何在 Python Requests 库中设置超时](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A6%82%E4%BD%95%E5%9C%A8-python-requests-%E5%BA%93%E4%B8%AD%E8%AE%BE%E7%BD%AE%E8%B6%85%E6%97%B6)
4. [设置元组形式的超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%85%83%E7%BB%84%E5%BD%A2%E5%BC%8F%E7%9A%84%E8%B6%85%E6%97%B6%E5%80%BC)
5. [处理 POST 请求](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A4%84%E7%90%86-post-%E8%AF%B7%E6%B1%82)
6. [处理超时异常](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%A4%84%E7%90%86%E8%B6%85%E6%97%B6%E5%BC%82%E5%B8%B8)
7. [超时管理的最佳实践](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%B6%85%E6%97%B6%E7%AE%A1%E7%90%86%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5)
8. [使用超时参数](https://marsproxies.cn/blog/python-requests-timeout/#b-%E4%BD%BF%E7%94%A8%E8%B6%85%E6%97%B6%E5%8F%82%E6%95%B0)
9. [设置合适的超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%90%88%E9%80%82%E7%9A%84%E8%B6%85%E6%97%B6%E5%80%BC)
10. [设置全局超时](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%AE%BE%E7%BD%AE%E5%85%A8%E5%B1%80%E8%B6%85%E6%97%B6)
11. [监控并调整超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E7%9B%91%E6%8E%A7%E5%B9%B6%E8%B0%83%E6%95%B4%E8%B6%85%E6%97%B6%E5%80%BC)
12. [常见的超时问题及应对方法](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%B8%B8%E8%A7%81%E7%9A%84%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98%E5%8F%8A%E5%BA%94%E5%AF%B9%E6%96%B9%E6%B3%95)
13. [未设置超时值](https://marsproxies.cn/blog/python-requests-timeout/#b-%E6%9C%AA%E8%AE%BE%E7%BD%AE%E8%B6%85%E6%97%B6%E5%80%BC)
14. [异常处理不当](https://marsproxies.cn/blog/python-requests-timeout/#b-%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E4%B8%8D%E5%BD%93)
15. [超时设置过于激进](https://marsproxies.cn/blog/python-requests-timeout/#b-%E8%B6%85%E6%97%B6%E8%AE%BE%E7%BD%AE%E8%BF%87%E4%BA%8E%E6%BF%80%E8%BF%9B)
16. [结语](https://marsproxies.cn/blog/python-requests-timeout/#b-%E7%BB%93%E8%AF%AD)

分类

- [产品动态](https://marsproxies.cn/blog/category/product-news/)

  [5](https://marsproxies.cn/blog/category/product-news/)
- [产品对比](https://marsproxies.cn/blog/category/comparisons/)

  [8](https://marsproxies.cn/blog/category/comparisons/)
- [反检测解决方案](https://marsproxies.cn/blog/category/antidetect-solution/)

  [3](https://marsproxies.cn/blog/category/antidetect-solution/)
- [操作指南](https://marsproxies.cn/blog/category/how-to/)

  [119](https://marsproxies.cn/blog/category/how-to/)
- [球鞋抢购机器人](https://marsproxies.cn/blog/category/sneaker-bots/)

  [2](https://marsproxies.cn/blog/category/sneaker-bots/)
- [资讯](https://marsproxies.cn/blog/category/insights/)

  [89](https://marsproxies.cn/blog/category/insights/)

## 相关文章

[资讯](https://marsproxies.cn/blog/category/insights/)

### [LinkedIn 数据抓取：法律风险、工具与最佳实践](https://marsproxies.cn/blog/linkedin-scraping/)

了解 LinkedIn 数据抓取的法律风险、适用工具及最佳实践，助您在数据保护法规范围内合规采集数据。

[Lukas Tilkevicius 增长与合作经理](https://marsproxies.cn/blog/authors/lukas-tilkevicius/)

2026年10月16日

[资讯](https://marsproxies.cn/blog/category/insights/)

### [Beautiful Soup 解析：实用技巧与示例](https://marsproxies.cn/blog/beautiful-soup-parsing/)

通过实用的 Python 示例学习 Beautiful Soup 解析，了解 HTML 解析、数据提取、选择器、畸形 HTML 处理及数据抓取最佳实践。

[Dalius Pamedytis 软件工程师](https://marsproxies.cn/blog/authors/dalius-pamedytis/)

2026年10月13日

[资讯](https://marsproxies.cn/blog/category/insights/)

### [什么是代理抓取工具？工作原理及常用工具](https://marsproxies.cn/blog/proxy-scraper/)

代理抓取工具可以帮您查找并收集代理 IP，本文将介绍其工作原理、优缺点，以及几款实用工具。

[Lukas Tilkevicius 增长与合作经理](https://marsproxies.cn/blog/authors/lukas-tilkevicius/)

2026年10月8日
