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

评论