并发通信Manage,队列, 互斥锁
目录
Manage
进程间的通信是被限制的
from multiprocessing import Process a = 1 def func():
global a # 声明全局变量
a = 2 # 修改全局变量 func()
print(a) p = Process(target=func)
p.start()
p.join()
print(a)
两个结果,第一个是2,第二个是1-----> 进程内存空间是独立的
解决方案:开辟一个新的进程空间,通过代理器和管理器进行通信
1, 管理器负责与公共进程通信
2, 代理负责操作共享空间
from multiprocessing import Process, Manage(管理器) mgr = Manage() # 先开启一个子进程(守护进程),并且返回一个用来通信的管理器 shared_list = mgr.list() # 通过Manage管理器开启一个公共l列表空间(代理) def func(lis):
lis.appent('hello') p = Process(target=func, args=(shared_list, ))
p.start(0
p.join() print(shared_list) --> ['hello']
这里需要知道,可以开启的代理空间有以下几个:
mgr.list() 列表
mgr.dict() 字典
mgr.Queue() 队列
队列 先入先出
队列操作:
入列:put()
出列:get()
测试空:empty() 近似值
测试满:funll() 近似值
队列长度:qsize() 近似值
任务结束: task_done()
等待完成:join()
需要了解的是,队列中存在一个计数器的概念,当put的时候,计数器会加1,当task_done时,计数器减1
可以用join进行测试,当计数器不是0,队列会阻塞,只有当计数器为0时,才会解阻塞
互斥锁
线程间的通信不存在限制,但是会存在资源竞争的问题,即同时执行的线程,公用共享资源的时候,会抢占资源,导致数据乱序
所以需要互斥锁来锁定某些操作
在python的原始解释器Cpython中存在着GIL(Global Interpreter Lock,全局解释器锁)因此在解释器执行Python代码
时,会产生互斥锁来限制线程对共享资源的访问,直到解释器遇到I/O操作或者操作次数达到一定数目才会释放GIL。
import threading from Thread, Lock lock = Lock() # 实例化一个锁 with lock:
xxxxxxxx
'''
或者:
lock.acquire() # 上锁
xxxxxxxx
lock.release() # 解锁 xxxxxx能少则少
锁不能加太多,会大大下降性能
'''
from threading import Thread, Lock lock = Lock() # 实例化一个锁的实例
a = 0 def incr(n): # 自加
global a
for i in range(n):
with lock:
a += 1 def decr(n): # 自减
global a
for i in range(n):
with lock:
a -= 1 t = Thread(target=incr, args=(1000000, ))
t2 = Thread(target=decr, args=(1000000, ))
t.start()
t2.start()
t.join()
t2.join()
print(a) --> 0 如果不加锁,线程之间会竞争资源,得到的结果是一个随机值
并发通信Manage,队列, 互斥锁的更多相关文章
- Java并发编程实战 03互斥锁 解决原子性问题
文章系列 Java并发编程实战 01并发编程的Bug源头 Java并发编程实战 02Java如何解决可见性和有序性问题 摘要 在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和 ...
- 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型
进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...
- 并发编程 - 进程 - 1.互斥锁/2.模拟抢票/3.互斥锁与join区别
1.互斥锁: 互斥锁:Lock 原理就是把并发变成串行,一个一个运行,不错乱,但效率低 保证多个进程修改一块数据时,大家是一个一个修改,不错乱 mutex.acquire() mutex.releas ...
- 并发编程 - 线程 - 1.互斥锁/2.GIL解释器锁/3.死锁与递归锁/4.信号量/5.Event事件/6.定时器
1.互斥锁: 原理:将并行变成串行 精髓:局部串行,只针对共享数据修改 保护不同的数据就应该用不用的锁 from threading import Thread, Lock import time n ...
- golang互斥锁和读写锁
一.互斥锁 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段.它由标准库代码包sync中的Mutex结构体类型代表.sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开 ...
- Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- python并发编程之多进程1--(互斥锁与进程间的通信)
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
随机推荐
- [python基础] python生成wordcloud并保存
1.核心包 #jieba.pandas用来处理数据,数据源以xls格式存储的,这里用pandas进行处理import jieba from jieba import analyse import pa ...
- ::before和::after伪元素的使用
:before和:after伪元素在CSS中可以被用来添加元素.加小标.清浮动等. 基本用法: p::before {} p::after {} 1.string <style type=&qu ...
- CSS样式适配杂记
1.问:input框的对齐,制作类似百度搜索框的时候,发现IE下前面输入框和后面按钮总是不能对齐. 解答:给input框增加vertical-align:bottom; 2.问:IE下display: ...
- 在JavaScript中"+"什么时候是链接符号,什么时候是加法运算?
二元加法运算符“+”在两个操作数都是数字或都是字符串时,计算结果是显而易见的.加号“+”的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数会转换为字符串,加 ...
- cobbler+kickstart安装笔记
cobbler+kickstart安装笔记 本文参考老男孩配置:https://blog.oldboyedu.com/autoinstall-cobbler/ centos7:开机如果不启动网卡,需要 ...
- Elasticsearch之CURL命令的DELETE
也可以看我写的下面的博客 Elasticsearch之curl删除 Elasticsearch之curl删除索引库 删除,某一条数据,如下 [hadoop@master elasticsearch-] ...
- [转]使用ThinkPHP框架快速开发网站(多图)
本文转自:http://blog.csdn.net/ruby97/article/details/7574851 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkP ...
- [ NOI 2005 ] 聪聪与可可
\(\\\) \(Description\) 一张\(N\)个点,\(M\)条边的有向图中,猫在\(A\)点,鼠在\(B\)点,每一秒两者按照以下规则移动: 猫先走去往老鼠所在地的最短路,可以走一步或 ...
- android中TextView内容竖向显示
项目中遇到需要textview内容竖着排的需求,如图所示: 网上那些“教程”并不能达到需要的效果,发现有一个属性可以支持这种效果,android:ems=“*”,这是属性表示一行只显示*个字符. 具体 ...
- VBA/VBScript提取Word(*.doc)文件中包含的图片(照片)
VBA/VBScript提取Word(*.doc)文件中包含的图片(照片) 要处理的人事简历表是典型的Word文档,其中一人一份doc,里面包含有个人的照片,如果要把里面的照片复制出来就比较麻烦了 ...