python线程:threading

线程的概念:简单理解就是操作系统对cup资源的分配调度

下面用实例来讲一下threading的用法:

我们假设你想听歌、看电影来度过愉快的周末,以前的操作系统都是单个处理任务,但是现在cpu,你可以同时做很多种事情。

直接上代码,代码上看注释

import threading
from time import ctime, sleep

# 听歌、看电影可以在一个播放器下进行,我们要传入文件、播放时间
def super_player(file, time):

    # 这个循环可以设置每个文件的播放次数
    for i in range(2):

        # 打印出播放的是什么文件、时长、当前时间
        print("This play %s. time: %s accrount_time: %s" % (file, time, ctime()))
        sleep(time)



if __name__ == '__main__':
    
    # 用一个字典来放你想要操作的任务
    play_dict = {
        '往后余生.mp3': 3,
        '肖申克的救赎.mp4': 5,
        '这个杀手不太冷.mp4': 4,
    }
    
    # 弄一个线程列表放所开的线程
    threads = []

    # 来个循环开多个线程执行你要操作的任务
    for file, time in play_dict.items():
        
        # 为所需要的任务,开一个线程,target指定执行操作的函数,args为函数传参
        t = threading.Thread(target=super_player, args=(file, time))

        # 将线程添加到线程列表
        threads.append(t)
    
    # 一个循环开起线程列表中的所有线程
    for t_out in threads:

        # 将线程设置为守护线程,当主线程执行完毕,子线程也跟着销毁(也可不设)
        t_out.setDaemon(True)

        # 开启线程
        t_out.start()
    
    # 阻碍主线程,直到子线程执行完毕
    t_out.join()

    print("end thread %s" % ctime())

运行结果:

This play 往后余生.mp3. time: 3 accrount_time: Fri Nov  2 18:22:10 2018
This play 肖申克的救赎.mp4. time: 5 accrount_time: Fri Nov  2 18:22:10 2018
This play 这个杀手不太冷.mp4. time: 4 accrount_time: Fri Nov  2 18:22:10 2018
This play 往后余生.mp3. time: 3 accrount_time: Fri Nov  2 18:22:13 2018
This play 这个杀手不太冷.mp4. time: 4 accrount_time: Fri Nov  2 18:22:14 2018
This play 肖申克的救赎.mp4. time: 5 accrount_time: Fri Nov  2 18:22:15 2018
end thread Fri Nov  2 18:22:18 2018

可以看到三个任务的线程同时在18:22:10 2018开启,第一个执行3秒结束,第二个执行4秒结束,第三个执行5秒结束。

主线程在执行8秒后结束。如果是单个线程执行的话,至少主线程结束所用时间是:3+4+5=12秒。可以看出多个线程执行可以大大提高执行任务的效率。而且你可以将第一个任务和第二个任务的时间同样改为5秒,主线程结束的时间为10秒,同样也没有超过12秒,然鹅单个线程就蛋疼了。

猜你喜欢

转载自blog.csdn.net/Chenftli/article/details/83659295