zoukankan      html  css  js  c++  java
  • 进程

    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()

  • 相关阅读:
    通过IP地址和子网掩码与运算计算相关地址
    IP地址与子网掩码的计算
    win10用键盘控制鼠标
    requirements.txt
    vue中axios使用二:axios以post,get,jsonp的方式请求后台数据
    vue中axios使用一:axios做拦截器
    git切换分支冲突解决-删除分支
    获取指定月份前的第一天和最后一天及两个日期之间的月份列表
    git远程版本回退
    git Please move or remove them before you can merge
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9362642.html
Copyright © 2011-2022 走看看