Python常用模块threading与Thread线程池实战指南

Aria
Aria
发布时间:2026-10-12| 2人浏览过
原创

Python多线程编程中,频繁创建销毁线程会消耗大量系统资源。通过引入线程池可实现任务的复用与高效调度。本文解析线程池的生产者-消费者模型,提供基于标准库的自定义实现方案,并详细拆解multiprocessing内置线程池的任务提交、生命周期管理与阻塞控制流程。

线程池核心概念与运行机制

线程池架构示意图展示主线程提交任务与池内空闲线程接收执行的过程
主线程负责任务分发,线程池负责队列管理与线程复用

线程池的运行遵循典型的生产者与消费者模型:

  • 主线程(生产者):仅负责向线程池内部的任务队列提交待执行函数与参数,无需感知底层的具体执行路径。
  • 线程池(消费者):预先创建固定数量的工作线程常驻后台,持续轮询任务队列。一旦获取到待处理对象,立即分配给空闲的工作线程执行。

该设计有效避免了高频线程创建与上下文切换带来的性能损耗,特别适合IO密集型并发场景。

基于Queue与Threading自定义线程池

借助Python内置的threading与queue模块,可以轻量级构建支持异步提交的线程池类。核心逻辑包含初始化守护线程、循环消费队列以及同步等待任务完成。

# -*- coding: utf-8 -*-
from threading import Thread
from queue import Queue
import time

class ThreadPool:
    def __init__(self, n):
        self.queue = Queue()
        # 创建指定数量的守护线程并启动
        for i in range(n):
            Thread(target=self.worker, daemon=True).start()

    # 线程工作循环
    def worker(self):
        while True:
            # 阻塞获取队列中的任务元组
            func, args, kwargs = self.queue.get()
            try:
                func(*args, **kwargs)
            finally:
                self.queue.task_done()

    # 异步提交任务
    def apply_async(self, target, args=(), kwargs=None):
        if kwargs is None:
            kwargs = {}
        self.queue.put((target, args, kwargs))

    # 阻塞主线程直到所有任务完成
    def join(self):
        self.queue.join()

def task_func(x):
    print(f'正在执行任务 {x}')
    time.sleep(2)
    print(f'任务 {x} 执行完毕')

# 初始化含2个工作线程的池
t = ThreadPool(2)
for i in range(5):
    t.apply_async(task_func, args=(i,))
print('全部任务已入队,等待执行结束...')
t.join()
print('所有线程池任务已完成')
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。