• 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,如果要是处理了异常

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

  • 相关阅读:
    汉语-词语:慧根
    汉语-词语:悟性
    汉语-汉字:耑
    汉语-汉字:羣
    汉语-词语:觉察
    汉语-词语:醒悟
    汉语-词语:觉悟
    Redhat 5禁止IPv6
    从缓存行出发理解volatile变量、伪共享False sharing、disruptor
    【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理
  • 原文地址:https://www.cnblogs.com/Han-org/p/8511743.html
Copyright © 2020-2023  润新知