多线程编程之基本方法介绍

279 阅读2分钟

python中有2个模块可以进行多线程编程,即 _thread和threading。 thread模块提供了多线程编程的低级API,使用起来比较繁琐。threading模块提供了多线程编程的高级API。threading模块基于thread封装,使用起来较为简单。因此,这里着重介绍threading模块

1.内置方法

threading.current_thread():返回当前的线程对象
threading.main_thread():返回主线程对象,主线程是python解释器启动的线程
threading.enumerate():返回一个正在运行的线程的列表,正在运行的线程是指线程启动后和结束前的状态。
threading.active_count(): 返回当前处于活动状态的线程个数,与len(threading.enumerate())结果一致

2.实例方法

run():用以表示线程活动的方法
start():启动线程,即线程准备就绪,等待cpu调度
join([timeout]):主线程等待子线程结束后再继续往下执行,可选参数timeout用于设置超时时间
isAlive():返回线程是否正在执行
getName():获取线程名称
setName():为线程设置名称
setDaemon(True):设置为守护线程。当我们使用setDaemon()方法设置线程守护的时候,则主线程结束后该线程立即结束,不管该线程的任务有没有执行完成。一般将不重要的线程设置为守护线程

example:

import threading
​
​
t = threading.current_thread()
# 获取当前线程名
print(t.name)
print(threading.active_count())
t = threading.main_thread()
# 获取主线程名
print(t.name)

result:

MainThread
1
MainThread

这里解释一下,因为代码只创建了一个线程,因此当前线程就是主线程,所以当前线程名和主线程名一样。

这里的t.name和t.getname()的作用一致,都是获取线程的名字。只不过t.name是通过属性访问的方式,t.getname()是通过调用方法的方式

t.name='xxx'和t.setname("xxx")也是作用一致,一个通过设置属性值,一个通过方法传参

3.使用方式

由于threading定义了额外的函数方法和Thread类,因此它有多种使用方式,比如普通使用方式、自定义线程类,守护线程、等待线程结束、多线程共享全局变量、互斥锁(递归锁)、信号量、线程事件、线程通信等。具体的使用会结合后面的例子加以说明。