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

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

python多进程

评论关闭