zoukankan      html  css  js  c++  java
  • python 进程与线程 精要

    程序与进程

    程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。

    程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

    进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程。

     线程

    线程是进程中执行运算的最小单位,是进程中的一个实体,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位。

    1、在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位

    2、同一进程中的各个线程,都可以共享该进程所拥有的资源

    3、一个进程中的多个线程之间,可以并发执行

    当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,

    Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。 
    _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 
    threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:

    • threading.currentThread(): 返回当前的线程变量。
    • threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    • threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

    除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

      • run(): 用以表示线程活动的方法。
      • start():启动线程活动。
      • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
      • isAlive(): 返回线程是否活动的。
      • getName(): 返回线程名。
      • setName(): 设置线程名。
      • setDaemon():设置为后台线程或前台线程(默认)如果是后台线程,主线程执行过程中,后台线程也在执行,主线程执行完毕后,后台线程不论成功与否,均停止;如果是前台线程,主线程执行过程中,前台线程也在执行,主线程执行完毕后,等待前台线程也执行完成后,程序停止。
    #!/usr/bin/env python
    #coding:utf8
    
    import threading  #线程模块
    import time
    
    def sayhi(num):  #定义每个线程要运行的函数
        print('running on number',num)
        time.sleep(3)
    
    if __name__ == "__main__":
        t1 = threading.Thread(target=sayhi,args=(33,)) #生成一个线程实例
        t2 = threading.Thread(target=sayhi,args=(22,)) #生成另一个线程实例
    
        t1.start()  #启动线程
        t2.start()
        print(t1.getName()) #获取线程名
        print(t2.getName())
        t1.join()  #阻塞主线程,等待t1子线程执行完后再执行后面的代码
        t2.join()  #阻塞主线程,等待t2子线程执行完后再执行后面的代码
        print('-----end')
    天才是百分之一的灵感,加百分之九十九的汗水,但那百分之一的灵感往往比百分之九十九的汗水来的重要
  • 相关阅读:
    HDU 4801 Pocket Cube
    HDU 5008 Boring String Problem(后缀数组+二分)
    2-Sat问题
    后缀数组
    树形DP
    图论
    SRM 628 DIV2
    组合博弈
    Github使用笔记
    VS2010+OpenCV配置
  • 原文地址:https://www.cnblogs.com/Christbao/p/12023118.html
Copyright © 2011-2022 走看看