自定义线程类实现线程体
其实threading.Thread是threading模块内的一个类,我们可以自行设计一个类,让这个类继承threading.Thread类,接着在def_init_()内调用threading_Thread_init()方法,然后再所设计的类类别设计run方法,这个概念就称为自定义线程。
自定义线程类实现线程体
import threading
import time
# 自定义子线程类,子线程一定要继承threading.Thread类
class DownLoadThread(threading.Thread):
# 初始化方法
def __init__(self, movie_name, thread_name):
# 注意即使是没有参数也要调用构造方法
super(DownLoadThread, self).__init__(name=thread_name)
self.movie_name = movie_name
# 子线程的任务代码(子线程类要重写父类的run方法,将子线程需要执行的任务代码写在run方法中
# 判断target是否为空,如果不是空就会调用target方法
# run 方法中书写的是子线程执行时候的任务代码
def run(self):
# 模拟耗时操作
for i in range(5):
print(f'{
self.daemon},{
self.name} 线程正在下载{
self.movie_name}中')
time.sleep(1)
# 子线程每个线程都是独立运行的,线程1不会影响线程2,同理线程2也不会影响线程3,互不影响
if __name__ == '__main__':
# 创建一个用于存储下载任务子线程的列表
download_threads : list[threading.Thread] = list() #空列表
# 参数列表:参数元组类型数据
download_agrs = ("三体一:地球往事", "三体二:黑暗森林", "三体三:死神永生")
# 创建子线程对象
for argument in download_agrs:
# 创建子线程(方式一:指定target如:threading.Thread(target=thread_body))
download_thread = DownLoadThread(argument, '下载线程')
# 将子线程添加到列表中
download_threads.append(download_thread)
# 启动子线程,It must be called at most once per thread object. 子线程对象的start()方法只能被调用一次
# It arranges for the object's run() method to be invoked in a separate thread of control.
# start()方法会在底层安排子线程的run方法在独立的线程控制中被执行
download_thread.start()
for download_thread in download_threads:
# 子线程插队行为
download_thread.join()
print(<