守护进程-互斥锁-IPC

守护进程?

         就是指用一个进程去守护另一个进程. 守护进程的代码非常简单: p.daemon = True 

         注意:必须在启动进程之前执行

什么时候需要使用守护进程?

         例如: qq中有个下载视频   应该用子进程去做 但是 下载的过程中 qq退出  那么下载也没必要继续了

  

互斥锁

         什么时候用锁?

             当多个进程 同时读写同一份数据 数据很可能就被搞坏了

            第一个进程写了一个中文字符的一个字节 cpu被切到另一个进程

            另一个进程也写了一个中文字符的一个字节

             最后文件解码失败

        

问题之所以出现 是因为并发 无法控住顺序

             目前可以使用join来将所有进程并发改为串行

与join的区别?

    多个进程并发的访问了同一个资源  将导致资源竞争(同时读取不会产生问题 同时修改才会出问题)

    第一个方案 加上join  但是这样就导致了 不公平  相当于 上厕所得按照颜值来

    第二个方案 加锁  谁先抢到资源谁先处理[

    相同点: 都变成了串行

    不同点:

    1.join顺序固定 锁顺序不固定!

    2.join使整个进程的任务全部串行  而锁可以指定哪些代码要串行

    锁使是什么?

    锁本质上就是一个bool类型的标识符  大家(多个进程) 在执行任务之前先判断标识符

    互斥锁 两个进程相互排斥

    注意 要想锁住资源必须保证 大家拿到锁是同一把

怎么使用?

    在需要加锁的地方 lock.acquire() 表示锁定

    在代码执行完后 一定要lock.release() 表示释放锁

    lock.acquire()

    放需要竞争资源的代码 (同时写入数据)

lock.release()

进程间的通讯

IPC 指的是进程间通讯

        之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程

        然而 进程内存是物理隔离的

    解决方案:

    1.将共享数据放到文件中   这样有点慢

    2.管道   subprocess中的那个  管道只能单向通讯  必须存在父子关系

3.共享一块内存区域  得操作系统帮你分配  速度较快

进程间通讯的另一种方式 使用queue

    queue  队列

    队列的特点:

        先进的先出

        后进后出

                   get 和 put的使用

         

猜你喜欢

转载自www.cnblogs.com/zhouhai007/p/9931524.html