zoukankan      html  css  js  c++  java
  • python33day

    内容回顾

    概念

    • 同步异步阻塞和非阻塞

      • 同步阻塞:调用一个函数需要等待这个函数的执行结果,并且在执行这个函数的过程中CPU不工作

        • inp=input('>>>')
          
      • 同步非阻塞:调用一个函数需要等待这个函数的执行结果,在执行这个函数的过程中CPU工作

        • ret=eval('1+2+3-4')
          
      • 异步非阻塞:调用一个函数不需要等待这个函数的执行结果,并且在执行这个函数的过程中CPU工作

        • start()
          
      • 异步阻塞:调用一个函数不需要等待这个函数的执行结果,在执行这个函数的过程中CPU不工作

        • #开启十个进程 异步的
          #获取这个进程的返回值,并且能做到哪一个进程先结束,就先获取谁的返回值。
          
    • 进程的三状态图

      • 就绪 ----->操作系统调度 ---->运行 ----->遇到io操作 ----> 阻塞
      • ​ ----->时间片到了 ----> 就绪
    • 进程和调度算法:短作业和长作业是有区别的,越长的作业被调度的没有短作业积极,每个io操作都会让你辛苦排队得来的执行CPU机会让给其他程序

      • 先来先服务
      • 短作业优先
      • 分时的概念
      • 多级反馈算法
    • 进程开启和关闭

      • 父进程 开启了 子进程
      • 父进程 要负责给 子进程 回收子进程结束后的资源

    今日内容

    Process类拾遗

    • 开启进程的另一种方法

      from multiprocessing import Process
      import os
      import time
      
      class MyProcess(Process):
          def __init__(self,a,b,c):
              self.a=a
              self.b=b
              self.c=c
              super().__init__()
          def run(self):
              time.sleep(1)
              print(os.getppid(),os.getpid(),self.a,self.b,self.c)
      
      if __name__ == '__main__':
          print('----->',os.getpid())
          for i in range(10):
              p=MyProcess(1,2,3)
              p.start()
              print(p.pid,p.ident)
              print(p.name)
              print(p.is_alive())
              p.terminate() #强制结束一个子进程
              print(p.is_alive())
              time.sleep(0.01)
              print(p.is_alive())
      
    • Process类的一些其他方法和属性

      • name pid daemon
    • 守护进程

      import time
      from multiprocessing import Process
      
      def son1():
          while True:
              print('in son1')
              time.sleep(1)
      
      def son2():
          for i in range(10):
              print('in son2')
              time.sleep(1)
      
      if __name__ == '__main__':
          p1=Process(target=son1)
          p1.daemon=True  # 表示设置p1是一个守护进程
          p1.start()
          p2=Process(target=son2).start()
          time.sleep(5)
          print('in main')
      # 主进程会等待所有的子进程结束,是为了回收子进程的资源
      # 守护进程会等待主进程的代码执行结束后再结束,而不是等待整个主进程
      # 守护进程结束和其他子进程的结束与否无关
      

    进程同步---lock锁

    • 抢票的时候,有人买了,票就会立刻少

    进程之间通信--队列

    • 生产者消费者模式
      • 爬虫的时候
      • 分布式操作:celery
      • 本质:就是让生产数据和消费数据的效率达到平衡并最大化
      • consumer producer

    进程之间的数据共享----Manager

    代码总行数3047+49=3096行

  • 相关阅读:
    bzoj4325: NOIP2015 斗地主(爆搜+模拟)
    bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)
    bzoj3555: [Ctsc2014]企鹅QQ (Hash)
    bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)
    bzoj1510: [POI2006]Kra-The Disks(单调栈)
    bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
    bzoj3048+3049+3050
    bzoj3083 遥远的国度 && bzoj3626 LCA (树链剖分)
    bzoj1745: [Usaco2005 oct]Flying Right 飞行航班(贪心+map)
    bzoj1724: [Usaco2006 Nov]Fence Repair 切割木板(贪心+堆)
  • 原文地址:https://www.cnblogs.com/CodeForWorld/p/13332822.html
Copyright © 2011-2022 走看看