Python 线程 从Thread派生一个子类

本文介绍如何通过继承threading.Thread类创建自定义线程子类MyThread。关键步骤包括:在构造函数中调用父类构造函数,重写run()方法执行传入的函数并保存结果到self.res,提供getResult()方法获取结果。通过示例代码演示了创建多个线程并等待其完成的过程。

作者:zhuge··预计阅读 11 分钟·648 阅读·0 评论
Python 线程 从Thread派生一个子类

从Thread派生一个子类,创建这个子类的实例,子类化Thread类,MyThread子类的构造函数一定要先调用基类的构造函数,特殊函数__call__()在子类中,名字要改为run()。在MyThread类中加入一些用于调试的输出信息,把代码保存到MyThread模块中,并导入这个类。使用self.func()函数运行这些函数,并把结果保存到实现的self.res属性中,创建一个新函数getResult()得到结果。

import threading
from time import sleep
from datetime import datetime

class MyThread(threading.Thread):     def init(self, func, args, name=''):         threading.Thread.init(self)         self.name = name         self.func = func         self.args = args     def getResult(self):         return  self.res

    def run(self):         #调用类内的方法         print('MyThread Start*')         print('param:---->' + self.name)         #完成之后可以调用传入的方法         self.res = self.func(self.args)         print('MyThread End')

def get_date_str(dt):     return datetime.strftime(dt, '%Y-%m-%d %H-%M-%S') def subthread(thid, sec):     print(f'subthread-线程{thid},Start at {get_date_str(datetime.now())} ,sleep{sec} s')     sleep(sec)     print(f'subthread-线程{thid},End at {get_date_str(datetime.now())} ,sleep{sec} s') def main():     print('-'  10 + 'ALL START:' + get_date_str(datetime.now()) + '-'  10)     threads = []     loops = [4, 2]     thread_count = range(len(loops))     for i in thread_count:         t=MyThread(subthread,(i,loops[i]),subthread.name)         threads.append(t)

    for i in thread_count:         threads[i].start()     for i in thread_count:         threads[i].join()  # 线程全部结束之后主线程才会退出     print('-'  10 + 'ALL End:' + get_date_str(datetime.now()) + '-'  10)

if name == 'main':     main()


相关文章

评论

加载中...