[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 ...
随机推荐
- docker 踩坑日记The last packet sent successfully to the server was 0 milliseconds ago.
The last packet sent successfully to the server was 0 milliseconds ago. 今日遇到了这个坑,看似平白无奇. 首先,我定位到是数据库 ...
- [20191115]oracle实例占用内存计算.txt
[20191115]oracle实例占用内存计算.txt --//以前学习oracle数据库时,总想了解实例占用内存多少,我曾经在一些会议底下问过一位高手,对方说计算这个相对很难,许多东西是共享的.- ...
- 【python3基础】python3 神坑笔记
目录 os 篇 os.listdir(path) 运算符篇 is vs. == 实例 1:判断两个整数相等 实例 2:argparse 传参 实例 3:np.where 命令行参数篇 Referenc ...
- java8-14-时间API
原来的时间类 1.默认值 我们使用起来不方便 2.在不同包 不规范 在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义 3.可变 线程 ...
- arp心得-caidachun
arp地址解析协议,以前也学习过,一直有疑问,不同网段怎么解析,arp代理是什么,静态路由为什么可以配置下一跳是接口,而不是ip 1.同网段广播请求,单播应答 2.不同网络根据路由表的下一跳地址ip地 ...
- 8.jenkins 远程管理
远程原理 在我们之前的操作中,是直接将指令写在jenkins 里面的 .因为是做实验.所以指令比较简单. 如果是正式环境的话,可能指令就比较多了. 我们可以将他写成脚本. 我们可以再 jenkins的 ...
- 关于网站登录后的页面操作所携带的不同cookie值
对于课堂派网站,登录后的页面操作只需要携带PHPSESSID或者cookie中间那部分即可,两个都带也可,SERVERID不知道是干啥的,每次响应的都会变. 代码实现: cookie = None c ...
- C# List<T> 转 DataTable
C# List<T>转DataTable 学习自:博客园 Overview 数据!!个人认为程序就是将数据变着花样的显示它.那么这个时候我们的数据处理和获取就时我们的关键一步,如果你数据都 ...
- SQL查询--约束
在慕课网上学习时记的关于oracle中约束概念的基础笔记,当初一直对约束的概念不清不楚的,所以找了些资料来看 约束是数据库用来确保数据满足业务规则的手段 约束的作用:定义规则.确保完整性 1. ...
- HDU2899Strange fuction(二分/三分)
传送门 题目大意:求 F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100):的最小值 题解:求个导,二分导函数零点,就是原函数最小值所在的 ...