一、进程和线程的区别:
简而言之:
一个程序至少有一个进程,一个进程至少有一个线程.
守护线程:当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。
进程是资源分布的单元
线程是进程中真正执行代码的 进程运行起来,会有一个主线程进行运行
父子线程:相互独立运行,当所有的子线程执行完后,主线程才执行完
--------------------- 全文地址请点击:https://blog.csdn.net/yanhuatangtang/article/details/75313356?utm_source=copy
二、多线程例子:
#coding=utf-8
from time import sleep, ctime
import threading
def super_player(file,time):
for i in range(2):
print ( 'Start playing: %s! %s
' %(file,ctime()))
sleep(time)
#播放的文件与播放时长
list = {'爱情买卖.mp3':3,'阿凡达.mp4':5,'我和你.mp3':4}
threads = []
files = range(len(list))
#创建线程
for file,time in list.items():
t = threading.Thread(target=super_player,args=(file,time))
threads.append(t)
if __name__ == '__main__':
#启动线程
for i in files:
#threads[i].setDaemon(True) #声明为守护线程 一般有了join,就不用此句。
threads[i].start() #开始线程活动
for i in files:
threads[i].join() #在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
#主线程
print ( 'end:%s' %ctime())
参考:
进程和线程的区别
Python 一篇学会多线程
守护线程与非守护线程
Python中threading的join和setDaemon的区别及用法[例子]
python中thread的setDaemon、join的用法
挂起(等待,阻塞): 进程在操作系统中可以定义为暂时被淘汰出内存的进程
- join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接着threada.join()往后运行。
- setDaemon:主线程A启动了子线程B,调用b.setDaemaon(True),则主线程结束时,会把子线程B也杀死,与C/C++中得默认效果是一样的。