实例讲解Python多线程的使用
大家好,欢迎来到 Crossin的编程教室 !
我们知道进程是资源分配的单位,线程是处理机调度的单位。下文就以简明的例子带大家理解线程,并使用Python实现多线程。
比如在飞车程序中,我们在玩游戏的同时,还可以听到游戏为我们配置的背景音乐。在这个例子中启动飞车程序就是一个进程,玩游戏和听音乐是两个线程。
def music(music_name):for i in range(2):print('正在听{}'.format(music_name))sleep(1)print('music over')def game(game_name):for i in range(2):print('正在玩{}'.format(game_name))sleep(3)print('game over')if __name__ == '__main__':music('稻香')game('飞车')print('主线程结束')
我先听了一首《稻香》,通过for循环控制音乐播放两次,每首音乐播放需要1秒,sleep()来控制音乐播放的时长,接着又玩了两把飞车,最后关闭了程序。
----输出----正在听稻香music over正在听稻香music over正在玩飞车game over正在玩飞车game over主线程结束
多线程
from time import sleepimport threadingdef music(music_name):for i in range(2):print('正在听{}'.format(music_name))sleep(1)print('music over')def game(game_name):for i in range(2):print('正在玩{}'.format(game_name))sleep(3)print('game over')threads = []t1 = threading.Thread(target=music,args=('稻香',))threads.append(t1)t2 = threading.Thread(target=game,args=('飞车',))threads.append(t2)if __name__ == '__main__':for t in threads:t.setDaemon(True)t.start()print('主线程运行结束')
----输出----正在听稻香正在玩飞车主线程运行结
我们可以看到这并不符合我们的要求,子线程(muisc 、game )和主线程(print('主线程运行结束'))都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。所以我们使用join()方法,守护子线程。
from time import sleepimport threadingdef music(music_name):for i in range(2):print('正在听{}'.format(music_name))sleep(1)print('music over')def game(game_name):for i in range(2):print('正在玩{}'.format(game_name))sleep(3)print('game over')threads = []t1 = threading.Thread(target=music,args=('稻香',))threads.append(t1)t2 = threading.Thread(target=game,args=('飞车',))threads.append(t2)if __name__ == '__main__':for t in threads:t.start()for t in threads:t.join()print('主线程运行结束')
join()的作用是在该子线程完成运行之前,主线程将一直被阻塞。
----输出----正在听稻香正在玩飞车music over正在听稻香music overgame over正在玩飞车game over主线程运行结束
如果不使用setDaemon与join,那么最后的结果是主线程与子线程同时运行,直到所有线程都运行结束,程序才会结束。
----不使用setDaemon与join的输出----正在听稻香正在玩飞车主线程运行结束music over正在听稻香music overgame over正在玩飞车game over
以上就是Python使用多线程的基本框架,你学会了吗?
作者:AI工程师Tiger
来源:AI有温度
点此查看《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》介绍
感谢转发和点赞的各位~
_往期文章推荐_
【教程】: python