import threading
from time import ctime, sleep
loops = [4,2]
class MyThread(threading.Thread):
'''继承Thread类,初始化参数'''
def __init__(self, func , args, name ='' ):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
'''调用ThreadFunc类,覆写__call__方法,在这个子类里写成run()方法'''
def run(self):
self.func(*self.args)
def loop(nloop, nsec):
print('Start loop',nloop,'at:',ctime())
sleep(nsec)
print("loop",nloop,'done at:',ctime())
def main():
print("Starting at:",ctime())
threads = []
nloops = range(len(loops))
for i in nloops:
t = MyThread(loop,(i,loops[i]),loop.__name__)
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print("All done at:",ctime())
if __name__ == '__main__':
main()
现在对上面的类进行修改,使其实现的Thread子类更加通用,以便以后直接导入这个类
这个是要在工程的根目录下创建,以后就可以直接导入
import threading
from time import ctime, sleep
loops = [4,2]
class MyThread(threading.Thread):
def __init__(self,func,args,name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
#通过getResult获取下面的返回值
def getResult(self):
return self.res
def run(self):
print('Starting',self.name,'at:',ctime())
self.res = self.func(*self.args) #将实例化的属性保存到res里面
print(self.name ,'finsihed at:',ctime())
def loop(nloop, nsec):
print('Start loop',nloop,'at:',ctime())
sleep(nsec)
print("loop",nloop,'done at:',ctime())
def main():
print("Starting at:",ctime())
threads = []
nloops = range(len(loops))
for i in nloops:
t = MyThread(loop,(i,loops[i]),loop.__name__)
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print("All done at:",ctime())
if __name__ == '__main__':
main()