zoukankan      html  css  js  c++  java
  • python多进程

    好长时间没有更新博客内容了,最近一直在研究python,刚好了解多进程 那我们就一起了解一下多进程。(写给自己看  怕自己忘了。。。)

    1、什么是进程?

      进程指的是程序的一次执行过程,而程序则指的是一个文件,磁盘中可执行的代码。

      进程运行时需要把程序加载如内存,进程有一定的生命周期,进程的创建由操作系统控制,进程占有系统的资源

    2、进程的分类

      IO密集型 : IO操作远远大于计算操作,因为CPU效能要远远高于IO的读写操作,所以这类程序一般cpu都处于等待IO运行的状态。

      cpu密集型:程序中运算较多,IO较少,cpu占用率高

    3、进程控制块 (PCB)

      指的是在内存中开辟的存放进程信息的空间。在linux下查看进程相关信息:ps -aux

      每个内存都有单独占有4G地址空间=======》存放在计算机的虚拟内存地址。

    4、进程的状态:

      三态:  

        就绪 : 进程具备运行条件,等待系统分配资源
        执行 : 进程占有cpu开始运行
        等待 : 又称为阻塞态或者睡眠态,进程等待某种条件,或等待某件事件的完成

      

      五态(在3态基础上增加)

        新建 : 创建一个进程, 直接表现为创建程序,或者创建子进程

        终止 : 程序执行结束,完成善后,或处于僵尸状态

      进程状态标识:

        D : 等待态
        S : 等待态
        T : 等待态
        R : 运行态,就绪态
        Z :  僵尸态进程
        N : 低优先级的进程
        < :  高优先级
        + :  前台进程

      

        linux 下进程相关命令

        ps  -aux   显示进程信息

        ps  -ef

        ps  -ajx

        pstree  查看进程树结构

        top  检测系统中的进程

        进程优先级 : linux  进程优先级范围  -20 --- 19 数字越小优先级越高

        

        nice  -9  ./while  表示以9的优先级运行某个程序

        renice  n  pid  将pid的进程 优先级修改为 n

        kill  -sig   pid   给pid的进程发送一个sig信号

        ./while.py  &  将程序后台运行

    5、创建进程:
      fork 创建新的进程 (linux 和unix 平台)

      import os 

      fork()
      功能 : 为当前进程,创建一个子进程
      参数: 无
      返回值:

         < 0  表示创建进程失败
              = 0  在新创建的进程中返回一个返回值
              > 0  在父进程中返回一个返回值

      父子进程 :

        子进程会继承父进程几乎全部的代码段
                  子进程拥有自己独立的信息标识

      

      * 子进程和父进程都是独立存在的,在运行上相互不影响
      * 利用fork返回值在父子进程中的不同去执行不同的内容,是多任务的固定方法

      * 父进程中fork的返回值为创建的子进程的PID号
      * 父子进程几乎拥有相同的资源,包括fork前所定义的内容

      

     1 import os
     2 from time import sleep
     3 
     4 a = 10
     5 #创建子进程
     6 pid  = os.fork()
     7 
     8 if pid < 0:
     9     print('create process failed')
    10 elif pid == 0:
    11     a = 1000
    12     print("This is child process")
    13 else:
    14     sleep(2)
    15     print('The pid = ',pid)
    16 
    17     print("This is parent process")
    18 
    19 print('a = ',a)
    20 print("**********the end***********")
    View Code

      import os

      os.getpid()    获取当前进程的PID号
      os.getppid()   获取当前进程父进程的PID号

      进程退出函数
      import os
      os._exit([status])

      import sys
      sys.exit([status])

        功能 : 退出一个进程
        

     1 import os
     2 import sys
     3 
     4 a = 0
     5 while a < 10:
     6     print('a = ',a)
     7     a += 1
     8     try:
     9         if a == 5:
    10             # sys.exit(3)
    11             os._exit(0)
    12     except SystemExit as e:
    13         print(e)
    14 
    15 print("+++++++++++++++++")
     

        参数 : 表示进程的退出状态,0表示进程正常退出,非0表示异常退出。sys.exit()可以传入字符串,在退出时打印一下字符串

        区别 : _exit()  直接退出
              exit()   抛出SystemExit,如果要是处理了异常

        僵尸进程:子进程先于父进程退出,父进程没有处理子进程的退出状态,此时子进程就会成为僵尸进程

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/Han-org/p/8511743.html
Copyright © 2011-2022 走看看