多线程-threading模块2

从上面例子中发现线程的创建是颇为麻烦的,每创建一个线程都需要创建一个 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[] 线程组,最后打印结束时间。

原文地址:https://www.cnblogs.com/yrxns/p/9808859.html