Python threading模块核心用法与多线程并发实战

顾星河
顾星河
发布时间:2026-10-12| 3人浏览过
原创

本文深入解析Python threading模块,通过对比单线程与多线程执行耗时,展示Thread类的并发优势。详细讲解activeCount获取线程数、enumerate列出线程对象及setDaemon设置后台进程的具体用法,帮助开发者掌握Python多线程编程核心技巧。

Python中的threading模块提供了比底层thread模块更高层的API,旨在简化线程的并发性处理。该模块支持多个线程并发运行,并允许这些线程共享内存空间,从而实现更高效的数据交互与任务处理。

接下来将详细演示threading模块的具体应用场景与代码实现。

一、Thread类的基本使用

在使用多线程时,目标函数可以通过实例化一个Thread对象来代表一个独立的线程。创建好Thread对象后,调用其start()方法即可启动该线程,使其开始执行指定的任务。

为了直观展示多线程的优势,下面对比了不使用多线程与使用多线程并发两种场景下的执行效果。

首先展示的是不使用多线程的情况,即串行执行任务。

具体实现代码如下:

#!/usr/bin/python 
#compare for multi threads 
import time 
def worker(): 
    print"worker" 
    time.sleep(1) 
    return 
    if__name__ =="__main__": 
    for i in xrange(5): 
    worker()

执行上述代码后的结果如下:

接下来展示使用多线程并发执行相同任务的操作。

对应的代码实现如下:

#!/usr/bin/python 
import threading 
import time 
defworker(): 
    print"worker" 
    time.sleep(1) 
    return 
    fori in xrange(5): 
        t=threading.Thread(target=worker) 
        t.start()

从执行结果可以明显看出,使用多线程并发操作所花费的时间远少于串行执行,体现了多线程在提升程序运行效率方面的显著优势。

二、threading.activeCount()方法详解

该方法用于返回当前进程中活跃的线程数量。需要注意的是,返回的计数中包含了主线程本身,因此在计算子线程数量时需减去1。

相关代码示例如下:

#!/usr/bin/python 
#current's number of threads 
import threading 
import time 
defworker(): 
    print"test" 
    time.sleep(1) 
    for i in xrange(5): 
        t=threading.Thread(target=worker) 
        t.start() 
        print"current has %d threads" % (threading.activeCount() -1)

三、threading.enumerate()方法详解

此方法用于返回当前正在运行的Thread对象列表,包括主线程和所有已启动但未结束的子线程。

具体代码示例如下:

#!/usr/bin/python 
#test the variable threading.enumerate() 
import threading 
import time 
defworker(): 
    print"test" 
    time.sleep(2) 
    threads=[] 
    for i in xrange(5): 
        t=threading.Thread(target=worker) 
        threads.append(t) 
        t.start() 
        for item in threading.enumerate(): 
            print item 
            print for item in threads: 
                print item

四、threading.setDaemon()方法详解

该方法用于将线程设置为后台进程(守护线程)。后台线程的特点是:当所有非后台线程结束时,无论后台线程是否执行完毕,主程序都会立即退出。

设置后台线程的代码如下:

#!/usr/bin/python 
#create a daemon 
import threading 
import time 
def worker(): 
    time.sleep(3) 
    print"worker" 
    t=threading.Thread(target=worker) 
    t.setDaemon(True) 
    t.start() 
    print"haha"

观察运行结果可以发现,worker()方法中的打印操作并未显示,这是因为主线程在打印“haha”后结束,导致作为后台进程的worker线程被强制终止,从而验证了setDaemon()的效果。

至此,关于Python threading模块的简要介绍已完成。如需了解更多threading模块相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢大家的支持!

相关标签:

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

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 算法库。