threading.Thread类最普遍的用法如下所示:
import threading
import time
count = 0
"""注: 可以参考这篇博客https://blog.csdn.net/l835311324/article/details/86608850的示例2,
这个MyThread类继承了threading模块的Thread类,对其下面的run方法进行了重写"""
class MyThread(threading.Thread):
def __init__(self , threadName):
super(MyThread,self).__init__(name=threadName)
"""一旦这个MyThread类被调用,自动的就会运行底下的run方法中的代码,
因为这个run方法所属的的MyThread类继承了threading.Thread"""
def run(self):
global count
for i in range(100):
count += 1
time.sleep(0.3)
print(self.getName() , count)
for i in range(2):
MyThread("MyThreadName:" + str(i)).start()
以下是Thread对象方法
Thread 对象数据属性
描述
name
线程名
ident
线程的标识符
daemon
布尔标志,表示这个线程是否是守护线程
Thread主要对象方法
Thread 对象方法
描述
init(group=None, tatget=None,args=(), kwargs ={}, verbose=None, daemon=None)
实例化一个线程对象,需要有一个可调用的 target,以及其参数 args或 kwargs。
start()
开始执行该线程
run()
定义线程功能的方法(通常在子类中被应用开发者重写)
join (timeout=None)
直至启动的线程终止之前一直挂起;除非给出了 timeout(秒),否则会一直阻塞
示例:
import threading
import time
def read():
for x in range(5):
print('在%s,正在听音乐' % time.ctime())
time.sleep(1.5)
def write():
for x in range(5):
print('在%s,正在看电视' % time.ctime())
time.sleep(1.5)
def main():
music_threads = [] # 用来存放执行read函数线程的列表
TV_threads = [] # 用来存放执行write函数线程的列表
for i in range(1,2): # 创建1个线程用于read(),并添加到read_threads列表
t = threading.Thread(target=read) # 执行的函数如果需要传递参数,threading.Thread(target=函数名,args=(参数,逗号隔开))
music_threads.append(t)
for i in range(1,2): # 创建1个线程执行write(),并添加到write_threads列表
t = threading.Thread(target=write) # 执行的函数如果需要传递参数,threading.Thread(target=函数名,args=(参数,逗号隔开))
TV_threads.append(t)
for i in range(0,1): # 启动存放在read_threads和write_threads列表中的线程
music_threads[i].start()
TV_threads[i].start()
if __name__ == '__main__':
main()
为了让线程更好的封装,可以用threading模块下的Thread类,继承这个类,然后实现run方法,线程就回自动运行run方法中的代码,具体示例如开头所示的代码块。