[b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock
# -*- coding: utf-8 -*-
"""
多进程 锁使用 逻辑:
10个进程各种睡眠2秒,然后打印。
不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共20秒 总结:
1、Lock 只要1把锁,RLock 有多把锁,但是不清楚什么场景只适合用RLock 使用:
1. 创建所 lock = Lock() or lock = RLock()
2. 把锁当做参数传入给子进程
3. 在子进程执行代码中对代码块,加锁 lock.acquire(); 其他代码 lock.release() """ from multiprocessing import Process, Lock, RLock
import time # 不加锁
def f(l, i):
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i) # 加Lock
def f2(l, i):
l.acquire() # 竞争锁
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i)
l.release() # 释放锁 # 加Rlock
def f3(l, i):
l.acquire() # 竞争锁
l.acquire() # 抢到锁后,再加一把锁
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i)
l.release() # 释放锁
l.release() # 前面几个acquire,这里就有几个 release 如果注释掉,其他进程阻塞 if __name__ == '__main__':
lock = Lock()
rlock = RLock() import ptools;ptools.checkname(rlock);exit(0) # base
# for num in range(10):
# Process(target=f, args=(None, num)).start() # case1
for num in range(10):
Process(target=f2, args=(lock, num)).start()
#
# # case2
# for num in range(10):
# Process(target=f3, args=(rlock, num)).start() """
Out:
不加锁
('49:31', 'hello world', 3)
('49:31', 'hello world', 2)
('49:31', 'hello world', 1)
('49:31', 'hello world', 7)
('49:31', 'hello world', 8)
('49:31', 'hello world', 5)
('49:31', 'hello world', 6)
('49:31', 'hello world', 4)
('49:31', 'hello world', 9)
('49:31', 'hello world', 0) case1 加锁,case2差不多
'49:52', 'hello world', 0)
('49:54', 'hello world', 7)
('49:56', 'hello world', 2)
('49:58', 'hello world', 5)
('50:00', 'hello world', 4)
('50:02', 'hello world', 3)
('50:04', 'hello world', 8)
('50:06', 'hello world', 1)
('50:08', 'hello world', 6)
('50:10', 'hello world', 9)
"""
[b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock的更多相关文章
- [b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe
# -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1.只适合两个进 ...
- [b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager
# -*- coding: utf-8 -*- """ 多进程数据共享 服务器进程 multiprocessing.Manager 入门使用 逻辑: 20个子线程修改共享 ...
- [b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array
1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一 ...
- [b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event
# -*- coding: utf-8 -*- """ 多进程 同步 事件multiprocessing.Event 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制 ...
- [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore
# -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...
- [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue
1 队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...
- python笔记10-多线程之线程同步(锁lock)
前言 关于吃火锅的场景,小伙伴并不陌生,吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼丸的过程中,先锁定操作,让吃火锅的小伙伴停一会,等鱼丸 ...
- 扯扯python的多线程的同步锁 Lock RLock Semaphore Event Condition
我想大家都知道python的gil限制,记得刚玩python那会,知道了有pypy和Cpython这样的解释器,当时听说是很猛,也就意味肯定是突破了gil的限制,最后经过多方面测试才知道,还是那德行… ...
- python 多线程中的同步锁 Lock Rlock Semaphore Event Conditio
摘要:在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lo ...
随机推荐
- JVM从入门开始深入每一个底层细节
1 官网 1.1 寻找JDK文档过程 www.oracle.com -> 右下角Product Documentation -> 往下拉选择Java -> Java SE docum ...
- Cesium专栏-裁剪效果(基于3dtiles模型,附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- Eclipse的Git插件Egit: merge合并冲突具体解决方法
http://www.cnblogs.com/wavky/p/3504060.html 稍微总结下弄了半个下午的egit的merge合并冲突解决方法,网上看的都是一个模板出来的,看的糊里糊涂,花了很多 ...
- 安装上传下载插件,jdk及redis
安装rz sz (1)编译安装root 账号登陆后,依次执行以下命令:cd /tmpwget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gzt ...
- linux下Oracle与swap分区大小配置规划
Oracle于Linux系统---交换空间大小规划 分三种常用情况(1)实际内存为1GB~2GB建议交换空间为内存的1.5倍 (2)实际内存为2GB~8GB建议交换空间与内存相同 (3)实际内存超过8 ...
- Scrapy的Spider类和CrawlSpider类
Scrapy shell 用来调试Scrapy 项目代码的 命令行工具,启动的时候预定义了Scrapy的一些对象 设置 shell Scrapy 的shell是基于运行环境中的python 解释器sh ...
- JVM java内存区域的介绍
jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个 先上图一: 总的就是 java的内存模型 内存模型又分堆内存(heap)和方法区 ...
- Gaussian field consensus论文解读及MATLAB实现
Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...
- shiro授权、注解式开发
在ShiroUserMapper.xml中新增内容 <select id="getRolesByUserId" resultType="java.lang.Stri ...
- 控制label标签的宽度,不让它换行 label标签左对齐
1==>控制label标签的宽度.解决字段名太长时,不会换行显示 label-width="100px" label标签的宽度是100px; style="widt ...