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

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

 

posted @ 2018-03-05 22:23  韩男神  阅读(389)  评论(0编辑  收藏  举报