python多线程:自定义线程类实现线程体、多线程锁机制、死锁问题的解决

自定义线程类实现线程体

其实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(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值