前言
threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:
- threading.currentThread(): 返回当前的线程变量。
- threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
- threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
除了使用方法外,线程模块同样提供了Thread类
来处理线程,Thread类提供了以下方法:
- run(): 用以表示线程活动的方法。
- start():启动线程活动。
- join([time]):
等待至线程中止
。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
- 参考文章
- python3并发编程(多进程,多线程,多任务) ⭐⭐建议先阅读本篇文章
一、使用 threading 模块创建线程
通过直接从 threading.Thread 继承
创建一个新的子类,并实例化后调用 start()
方法启动新线程,即它调用了线程的 run() 方法:
- 步骤 ⭐
- 创建类,继承自threading.Thread类
- 实例化创建的线程类
- 调用start()方法 [会自动调用run()方法]
- 代码如下(示例一):
import threading
import time
exitFlag = 0
# 创建类 继承自threading.Thread类
class myThread (threading.Thread):
# 注意:不要忘记在子类中初始化父类的方法Thread.__init__(self) 。需要重构 run() 方法来执行多线程的程序。
def __init__(self, threadID, name, delay):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.delay = delay
def run(self):
print ("开始线程:" + self.name)
print_time(self.name, self.delay, 5) # 调用要执行的程序