从上面例子中发现线程的创建是颇为麻烦的,每创建一个线程都需要创建一个 t(t1、t2、...),如果创建的线程较多时这样极其不方便。下面对通过例子进行改进:
#coding:utf-8 import threading from time import sleep,ctime #音乐播放器 def music(func): for i in range(2): print('Start playing: %s! %s' %(func,ctime())) sleep(2) #视频播放器 def move(func): for i in range(2): print('Start playing: %s! %s' % (func, ctime())) sleep(5) #判断文件类型,并交给相应的函数执行 def player(name): r = name.split('.')[1] if r == 'mp3': music(name) elif r == 'mp4': move(name) else: print('error: The format is not recognized!') list = ['爱情买卖.mp3','阿凡达.mp4'] #创建线程数组 threads = [] files = range(len(list)) for i in files: t = threading.Thread(target=player,args=(list[i],)) threads.append(t) if __name__ == "__main__": #启动线程 for i in files: threads[i].start() #守护线程 for i in files: threads[i].join() print('all end: %s' %ctime())
运行结果:
Start playing: 爱情买卖.mp3! Thu Oct 18 09:53:33 2018 Start playing: 阿凡达.mp4! Thu Oct 18 09:53:33 2018 Start playing: 爱情买卖.mp3! Thu Oct 18 09:53:35 2018 Start playing: 阿凡达.mp4! Thu Oct 18 09:53:38 2018 all end: Thu Oct 18 09:53:43 2018
有趣的是我们又创建了一个 player()函数,这个函数用于判断播放文件的类型。如果是 mp3 格式的, 我们将调用 music()函数,如果是 mp4 格式的我们调用 move()函数。哪果两种格式都不是那么只能告诉用 户你所提供有文件我播放不了。
然后,我们创建了一个 list 的文件列表,注意为文件加上后缀名。然后我们用 len(list) 来计算 list 列表有多少个文件,这是为了帮助我们确定循环次数。
接着我们通过一个 for 循环,把 list 中的文件添加到线程中数组 threads[]中。接着启动 threads[] 线程组,最后打印结束时间。