进程

1.进程理论

2.使用python来完成多进程

3.进程的控制

进程 : 操作系统就好像是一个学校,每个班和每个班都有自己的进度,都能同时运行 . 一个班就可以称之为操作系统中的一个进程.

操作系统的作用 : 帮助调度硬件资源,帮助调度软件.

程序和进程之间有什么区别?

什么是程序?

1.py文件  2.java/c++/c#代码   3.QQ,酷狗等应用程序

程序运行起来就是进程.

进程是资源分配的最小单位

进程的广义定义 : 他是操作系统动态执行的基本单元,是资源分配的最小单位.

一个程序要开始他的运行一定先由操作系统分配给他一些内存.

进程调度 : 1.先来先服务调度算法 2.短作业优先调度算法  3.时间片轮转法  4.多级反馈队列

同步 : 串行(按顺序执行)    异步 : 并行(同时执行)

并行 : 有多个CPU同时执行任务

并发 : 只有一个CPU交替执行多个任务

进程 : 是个资源分配单位.

进程调度 : 就是多个进程(运行中的程序)在操作系统的控制下被CPU执行,去享用计算机的资源.

   1.先来先服务

   2.短作业优先

   3.时间片轮转

   4.多级反馈队列

进程调度的过程是不能够随意被程序影响的.

程序的并行与并发 : 并行更快,并发只是宏观上的同时执行.

进程一共有三个状态 : 就绪   运行   阻塞

进程 : pid  Process  ID   进程ID

     ppid  parent  process  id   父进程ID

     父进程 : 负责回收一些子进程的资源

     子进程

进程的创建部分:

import  os 

print(os.getpid())

print(os.getppid()

上面一段代码是获取 主进程ID以及父进程ID

import  os

import  time

from multiprocessing import Process  #进程模块

def  func():

  time.sleep(2)

  print("in func",os.getpid(),os.getppid())

if __name__ == "__main__":

  print("in main",os.getpid(),os.getppid())

  p1 = Process(target = func)  #进程对象

  p1.start()  #向操作系统提交了一个开启子进程的申请

  p2 = Process(target = func)  #进程对象

  p2.start()  #向操作系统提交了一个开启子进程的申请

  print("主进程的代码执行结束了")

原理

if  __name__ =="__main__":

使用python,都是调用操作系统的命令,来启动程序.

同样使用python,不同的操作系统的操作结果是不同的

对于windows来说 , 必须加if __name__ == "__main__":

对于Linux   iOS来说,不必要加if __name__ == "__main__":

给子进程传参数:

import os,time

from  multiprocessing  import Process

def func(num):

  time.sleep(2)

  print("in  func",num,os.getpid(),os.getppid())

if  __name__ == "__main__":

  print("in  main",os.getpid(),os.getppid())

  p1 = Process(target = func,args = (1,))#进程对象

  p1.start()#向操作系统提交了一个开启子进程的申请

  p2 = Process(target = func,arg = (2,))#进程对象,传参时必须是元组.

  p2.start()#向操作系统提交了一个开启子进程的申请

  print("主进程的代码执行结束了")

其他方法和属性

1.开启多个子进程

import os,time

from multiprocessing import Process

def  func(num):

  print("in func",num,os.getpid(),os.getppid())

if __name__ == "__main__":

  print("in main",os.getpid(),os.getppid())

  for i in range(10):

    p = Process(target = func,args = (i,))

    p.start()#start不是运行一个程序,而是调用操作系统的命令,要创建子进程,非阻塞.

  print("主进程的代码执行结束了")

2.join 方法

import os,time

from multiprocessing import Process

def func(num):

  time.sleep(1)

  print("in  func",num,os.getpid(),os.getppid())

if  __name__ =="__main__":

  print("in main",os.getpid(),os.getppid())

  p = Process(target = func,args = (1,))

  p.start()#start不是运行一个程序,而是调用操作系统的命令,要创建子进程,非阻塞.

  p.join()#阻塞,直到p这个子进程执行完毕之后再继续执行

  print("主进程的代码执行结束了")

3.一批任务使用join

import os,time

from multiprocessing import Process

def func(num):

  print("in func",num,os.getpid(),os.getppid())

if __name__ == "__main__":

  print("in main",os.getpid(),os.getppid())

  pl = []

  for i in range(10):

    p = Process(target = func,args = (i,))

    p.start()#start不是运行一个程序,而是调用操作系统的命令,要创建子进程,非阻塞

    pl.append(p)

  for p in pl:

    p.join()#阻塞,直到p这个子进程执行完毕之后再继续执行.

  print("主程序的代码执行结束了")

4.is_alive  terminate

import os,time

from multiprocessing import Process

def func(num):

  time.sleep(2)

  print("in func",num,os.getpid(),os.getppid())

if __name__ == "__main__":

  print("in main",os.getpid(),os.getppid())

  p1 = Process(target = func,args = (1,))#进程对象

  p1.start()#向操作系统提交了一个开启子进程的申请

  print(p1.is_alive())#检测进程是否在执行任务

  p1.terminate()#强制结束子进程---非阻塞

  print(p1.is_alive())#检测进程是否在执行任务,在这里会打印True,因为操作系统接收到强制结束子进程命令后,不会立即结束,这时候再检测进程,会显示True.当过了0.01秒后,在打印就会结束子进程,就会打印False.

  print("主进程的代码执行结束了")

用面向对象的方式开启子进程

import os,time

from multiprocess import Process

class Myprocess(Process):

  def __init__(self,num):

    super().__init__()

    self.num = num

  def run(self):

    print("in run",self.num,os.getpid(),os.getppid())

if __name__ == "__main__":

  print("in main",os.getpid(),os.getppid())

  p = Myprocess(1)

  p.start()

 

posted @ 2018-07-24 21:13  冯坤大神  阅读(148)  评论(0编辑  收藏  举报