zoukankan      html  css  js  c++  java
  • 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++中得默认效果是一样的。
  • 相关阅读:
    兑奖
    杨辉三角
    偶数求和
    进制转化
    填词
    等值数目
    Spring框架的七个模块
    数据库中的第1、2、3范式 (昨天没睡好,因为那个蚊子~~)
    关于eclipse 不编译或者找不到*.class的问题
    servlet生命周期的理解
  • 原文地址:https://www.cnblogs.com/andylhc/p/9686684.html
Copyright © 2011-2022 走看看