Python多线程

一、进程和线程的区别: 

  简而言之:

    一个程序至少有一个进程,一个进程至少有一个线程.

    守护线程:当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。

进程是资源分布的单元

线程是进程中真正执行代码的 进程运行起来,会有一个主线程进行运行 

父子线程:相互独立运行,当所有的子线程执行完后,主线程才执行完

--------------------- 全文地址请点击: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++中得默认效果是一样的。
原文地址:https://www.cnblogs.com/andylhc/p/9686684.html