Python多线程入门教程

 更新时间:2026年06月13日 14:34:53   作者:detayun  
在Python中,多线程是一种并行执行代码的方式,它允许你同时运行多个线程以完成不同的任务,本文给大家介绍Python多线程入门教程,感兴趣的朋友一起看看吧

为什么需要多线程?

单线程程序一次只能做一件事。如果你的程序里有网络请求、文件IO、数据库查询这类"等结果"的操作,CPU其实在空转。

多线程的核心目的:让CPU在等待的时候,去干别的事。

先搞懂两个概念

概念说明
进程独立的程序,内存隔离,开销大
线程进程内部的执行单元,共享内存,开销小
GILPython的全局解释器锁,同一时刻只有一个线程在执行Python代码

⚠️ 关键结论:Python多线程适合IO密集型任务,不适合CPU密集型任务。

  • ✅ 网络请求、文件读写、数据库查询 → 多线程有用
  • ❌ 纯计算、图像处理 → 多线程没用(GIL限制),用多进程

最基础的用法

import threading
import time
def task(name, delay):
    print(f"{name} 开始")
    time.sleep(delay)
    print(f"{name} 结束")
# 创建线程
t1 = threading.Thread(target=task, args=("任务A", 2))
t2 = threading.Thread(target=task, args=("任务B", 1))
# 启动线程
t1.start()
t2.start()
# 等待线程结束
t1.join()
t2.join()
print("全部完成")

输出:

任务A 开始
任务B 开始
任务B 结束
任务A 结束
全部完成

两个任务同时在跑,总耗时约2秒,而不是3秒。

实战:并发请求接口

这是最常见的使用场景:

import threading
import requests
urls = [
    "https://api.example.com/1",
    "https://api.example.com/2",
    "https://api.example.com/3",
]
results = []
lock = threading.Lock()  # 保护共享数据
def fetch(url):
    resp = requests.get(url, timeout=5)
    with lock:  # 加锁,避免多个线程同时写列表
        results.append(resp.status_code)
threads = []
for url in urls:
    t = threading.Thread(target=fetch, args=(url,))
    t.start()
    threads.append(t)
for t in threads:
    t.join()
print(f"完成 {len(results)} 个请求")

进阶:用 ThreadPoolExecutor(推荐)

手动管理线程太麻烦,直接用线程池:

from concurrent.futures import ThreadPoolExecutor
import requests
urls = ["url1", "url2", "url3", ...]
def fetch(url):
    return requests.get(url).status_code
with ThreadPoolExecutor(max_workers=5) as executor:
    results = list(executor.map(fetch, urls))
print(results)

✅ 自动管理线程数量,不用手动 start/join
max_workers 控制并发数,避免把对方服务器打挂

三个常见坑

说明解决方案
GIL导致多线程不加速计算for i in range(10000000): pass 开10个线程也不会变快CPU密集型用 multiprocessing
共享数据竞争多个线程同时改同一个变量,结果不可预期threading.Lock() 加锁
线程数开太多每个线程有开销,开1000个线程反而更慢IO密集型:线程数 = CPU核数 × 2~5

什么时候用多线程?一张表说清

场景推荐方案
请求多个APIThreadPoolExecutor
读写多个文件✅ 多线程
爬虫✅ 多线程
大量数学计算❌ 用 multiprocessing
简单脚本,任务少❌ 没必要,单线程就够

一句话总结

Python多线程 = 让IO等待的时间不被浪费。记住GIL的存在,别用它做计算,它就很好用。

到此这篇关于Python多线程入门:从零到能用的文章就介绍到这了,更多相关Python多线程入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3 关于pycharm自动导入包快捷设置的方法

    Python3 关于pycharm自动导入包快捷设置的方法

    今天小编就为大家分享一篇Python3 关于pycharm自动导入包快捷设置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python从入门到精通(DAY 2)

    python从入门到精通(DAY 2)

    本文是python从入门到精通系列文章的第二篇,主要给大家简单讲解下Python的字典复制和内置函数,非常简单实用,需要的小伙伴可以参考下
    2015-12-12
  • pytorch之ImageFolder使用详解

    pytorch之ImageFolder使用详解

    今天小编就为大家分享一篇pytorch之ImageFolder使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 基于Python实现牛牛套圈小游戏的示例代码

    基于Python实现牛牛套圈小游戏的示例代码

    “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战!这篇文章小编主要为大家介绍一款基于Python实现牛牛套圈小游戏,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Python环境安装配置实用的提示

    Python环境安装配置实用的提示

    想要使用Python语言编写程序,我们必须下载Python安装包并配置Python环境,这篇文章主要给大家介绍了关于Python环境安装配置实用提示的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python基础知识+结构+数据类型

    Python基础知识+结构+数据类型

    这篇文章主要介绍了Python基础知识+结构+数据类型,文章基于python基础知识围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python实现从多个数据源(CSV,Excel,SQL)自动整合数据

    Python实现从多个数据源(CSV,Excel,SQL)自动整合数据

    这篇文章主要为大家详细介绍了Python实现从多个数据源(CSV,Excel,SQL)自动整合数据,文中的示例代码讲解详细,有需要的可以了解下
    2025-10-10
  • Python 列表(List) 的三种遍历方法实例 详解

    Python 列表(List) 的三种遍历方法实例 详解

    这篇文章主要介绍了Python 列表(List) 的三种遍历方法实例 详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Python 批量合并多个txt文件的实例讲解

    Python 批量合并多个txt文件的实例讲解

    今天小编就为大家分享一篇Python 批量合并多个txt文件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python Matplotlib实现三维数据的散点图绘制

    Python Matplotlib实现三维数据的散点图绘制

    这篇文章主要为大家详细介绍了Python Matplotlib实现三维数据的散点图绘制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论