1  守护进程:

主进程 创建 守护进程   辅助主进程的运行

设置进程的 daemon属性 p1.daemon=True

1 守护进程会在主进程代码执行结束后就终止;
2 守护进程内无法再开启子进程,否则抛出异常;
AssertionError: daemonic processes are not allowed to have children

注意:进程之间是互相独立的主进程代码运行结束,守护进程随即终止

from multiprocessing  import  Process
import time def work(n):
print('---start')
time.sleep(0.5)
print('---end')
def work2():
print('主人死了')
time.sleep(6)
print(' 我也不活了!') if __name__=='__main__':
p1=Process(target=work,args=(2,))
p2=Process(target=work2) p2.daemon=True # 修改 daemon属性 守护进程 不能再开子进程 p1.start()
p2.start()
time.sleep(5)
print('主') # 主进程结束---子进程(辅助进程)马上结束

2  同步锁  互斥锁

进程之间数据通信----需要共享数据

   ======多进程 共享数据=====

进程 之间   用   共享空间(争抢) ---- 硬盘 文件

修改共享数据---串行 ---保证数据安全
其他操作---并发

lock 可以锁住一部分 内容 ===== 把一部分并发 变为串行
# 模拟购票

from multiprocessing import Process,Lock
import os
import time
import json
import random def search(n): # 查找---并发
dic=json.load(open('db.txt'))
print('<%s> 查到的剩余票数 [%s] '%(n,dic['count']))
def get(n): # 修改操作---串行
dic=json.load(open('db.txt')) if dic['count']>0:
dic['count']-=1
time.sleep(random.randint(1,3))
json.dump(dic,open('db.txt','w'))
print('<%s> 购票成功'%(n)) def task(n,lock): search(n) lock.acquire() # 加锁
get(n)
lock.release() # 解锁 # with lock:
# get(n) # lock 支持上下文管理

if __name__=='__main__':
lock=Lock()
for i in range(30):
p=Process(target=task,args=(i,lock))
p.start()

3   IPC机制: ---- 内存数据的通信

内存空间  ----  共享的内存  (硬盘速度慢)

 ---进程之间的数据通信---

共享----竞争---无序---不安全

IPC机制 (进程间的通信) ----  (内存空间的数据通信) ----实现方法  队列 管道

数据安全---lock 锁

队列 (管道+锁)---基于IPC编程
管道------------基于IPC编程

队列:

                                ===   队列  =====

from multiprocessing import Queue q=Queue(3) # 只能放三次数据 q.put('bb')
q.put((3,1,2,5))
q.put({'a':1}) # q是队列对象 --- q 放在内存中 # q.get_nowait(11111) 不等 满了就会报错 print(q.get())
print(q.get())
print(q.get()) # print(q.get_nowait()) 不等 没有就会 报错

4  生产者 消费者 模型:

涉及到两个进程之间的通信---内存数据的交互(管道)---安全(锁)  ==== 队列(管道+锁)

生产者   消费者  ===== 通过 共享空间 (解耦合) ----队列

生产者消费者模型:

 1 程序中有两类角色
一类负责生产数据(生产者) 一类负责处理数据(消费者) 2 引入生产者消费者模型的目的:
平衡生产者 与 消费者之间的 速度差 3 如何实现:
生产者---队列----消费者 (解耦合)
 
 #  生产者 消费者 模型

from multiprocessing import Queue,Process
import time,random def producer(name,q):
for i in range(10):
time.sleep(0.2)
res='%s 制作的第%s包子'%(name,i)
q.put(res)
# q.put(None)
def consumer(name,q):
while True:
res=q.get()
if not res:break
print('%s 吃了 %s'%(name,res)) if __name__=='__main__':
q=Queue()
p=Process(target=producer,args=('egon',q)) #共享的管道 q
p2=Process(target=consumer,args=('alex',q)) #共享的管道 q
p.start()
p2.start() p.join() # 等待p进程结束
q.put(None)

网络编程基础----并发编程 ---守护进程----同步锁 lock-----IPC机制----生产者消费者模型的更多相关文章

  1. 守护、互斥锁、IPC和生产者消费者模型

    守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are ...

  2. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

  3. python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  4. (并发编程)进程IPC,生产者消费者模型,守护进程补充

    一.IPC(进程间通信)机制进程之间通信必须找到一种介质,该介质必须满足1.是所有进程共享的2.必须是内存空间附加:帮我们自动处理好锁的问题 a.from multiprocessing import ...

  5. 并发编程 - 进程 - 1.队列的使用/2.生产者消费者模型/3.JoinableQueue

    1.队列的使用: 队列引用的前提: 多个进程对同一块共享数据的修改:要从硬盘读文件,慢,还要考虑上锁: 所以就出现了 队列 和 管道 都在内存中(快): 队列 = 管道 + 上锁 用队列的目的: 进程 ...

  6. python开发进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  7. day34 python学习 守护进程,线程,互斥锁,信号量,生产者消费者模型,

    六 守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 #1.对主进程来说,运行完毕指的是主进程代码运行完毕 #2.对主线程来说,运行完 ...

  8. C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)

    前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程.锁.条件变量)来阐述一个经典问题——生产者消费者模型,并给出 ...

  9. Linux同步互斥(Peterson算法,生产者消费者模型)

    同步 两个或两个以上随时间变化的量在变化过程中保持一定的相对关系. 互斥 对一组并发进程,一次只有一个进程能够访问一个给定的资源或执行一个给定的功能. 互斥技术可以用于解决诸如资源争用之类的冲突,还可 ...

随机推荐

  1. Altera自带的RAM仿真学习

    (1)单口RAM 1.无读使能rden信号的ModelSim功能仿真: 在不使用读使能rden信号的情况下,单口RAM仿真结果表明: 1.写使能wren为高时,写数据操作有效: 2.写使能wren为低 ...

  2. python调用html内的js方法

    这方面资料不多,不懂html,不懂js,略懂python的我,稍微看了点html和js,好几天的摸索,终于测试成功了. PYQT+HTML利用PYQT的webview调用JS内方法 1.python调 ...

  3. 每天一个Linux命令(63)scp命令

        scp(secure copy)用于进行远程文件拷贝.     (1)用法:     用法:  scp [参数] [源文件] [目标文件]     (2)功能:     功能:  scp在主机 ...

  4. uCOS-II的学习笔记(共九期)和例子(共六个)

    源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...

  5. jq中ajax的dataType:"json"是指什么?

    dataType String 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML.在1.4中,JSON就 ...

  6. OS路径模块命令

    os.remove():删除指定文件os.rmdir():删除指定目录os.mkdir():创建单级目录os.makedirs():创建多级目录os.listdir(dirname):列出dirnam ...

  7. awk的逻辑运算符

    运算符 描述 赋值运算符 = += -= *= /= %= ^= **= 赋值语句 逻辑运算符 || 逻辑或 && 逻辑与 正则运算符 ~ ~! 匹配正则表达式和不匹配正则表达式 关系 ...

  8. Kubernetes 部署Weave Scope监控

    yaml下载地址: https://cloud.weave.works/k8s/scope.yaml?k8s-version=? 目前有以下几个版本: ["v1.4"," ...

  9. java写出图形界面

    1. 做出简单的窗体 package javaGUI; import java.awt.BorderLayout; import java.awt.Color; import javax.swing. ...

  10. java基础(2)-面向对象(1)

    面向对象 面向对象思想 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程:强调的是功能行为 面向对象:将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向对象举例 ...