# -*- 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的更多相关文章

  1. [b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe

    # -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1.只适合两个进 ...

  2. [b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager

    # -*- coding: utf-8 -*- """ 多进程数据共享 服务器进程 multiprocessing.Manager 入门使用 逻辑: 20个子线程修改共享 ...

  3. [b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array

    1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一 ...

  4. [b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event

    # -*- coding: utf-8 -*- """ 多进程 同步 事件multiprocessing.Event 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制 ...

  5. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...

  6. [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue

    1  队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...

  7. python笔记10-多线程之线程同步(锁lock)

    前言 关于吃火锅的场景,小伙伴并不陌生,吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼丸的过程中,先锁定操作,让吃火锅的小伙伴停一会,等鱼丸 ...

  8. 扯扯python的多线程的同步锁 Lock RLock Semaphore Event Condition

    我想大家都知道python的gil限制,记得刚玩python那会,知道了有pypy和Cpython这样的解释器,当时听说是很猛,也就意味肯定是突破了gil的限制,最后经过多方面测试才知道,还是那德行… ...

  9. python 多线程中的同步锁 Lock Rlock Semaphore Event Conditio

    摘要:在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lo ...

随机推荐

  1. Java - java概述

    简介: JAVA是一门面向对象的编程语言 1995有sun公司发布 java程序执行流程: xxxjava源文件, 经过编译器编译 产生字节码文件 字节码交给解释器 解释成当前平台的本地机器指令 名词 ...

  2. SpringBoot+MyBatisPlus+ElementUI一步一步搭建前后端分离的项目(附代码下载)

    场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...

  3. DWG文件怎么转换成PDF格式

    在CAD中,设计师们绘制的图纸都是以dwg文件来进行保存的.Dwg文件是不能够直接进行打开查看的,就需要将其格式进行转换一下.将dwg文件转换为PDF格式的进行查看.那具体要怎么来进行操作呢?下面小编 ...

  4. centOS如何灵活管理服务进程

     1.将程序跑起来,且关闭会话时程序仍在运行. nohup node index.js & (头部加了nohup,表示在你退出帐户或关闭终端之后继续运行相应的进程;尾部的&表示在后台执 ...

  5. Java-环境搭建(Mac版)

    对于开发人员来说,电脑的性能很重要,所以换了Mac后需要重新配置开发环境,网上对Windows系统的Java环境配置有很多,所以,这里就不多介绍.现在记录一下在Mac电脑上的Java环境配置. 众所周 ...

  6. MongoDB的模糊查询操作(类关系型数据库的 like 和 not like)

    1.作用与语法描述 作用: 正则表达式是使用指定字符串来描述.匹配一系列符合某个句法规则的字符串.许多程序设计语言都支持利用正则表达式进行字符串操作.MongoDB 使用 $regex 操作符来设置匹 ...

  7. MySQL第四课

    CREATE TABLE biao(    name VARCHAR(20) PRIMARY KEY,    age INT(11) NOT NULL,    sex CHAR(11)DEFAULT ...

  8. ubuntu 安装精简桌面; VNC; vncserver 配置

    安装最简单的环境: apt-get  install gnome-shell apt-get  install  gnome-panel apt-get  install   gnome-menus ...

  9. vi 中按了 Ctrl+S 后死机不能动怎么办?

    我们下意识想保存文档时,会不知觉地按下 Ctrl+S 组合键.但如果是正在 Linux 的 Shell 中使用 vi 编辑文本,这么按就糟了,会直接出现卡住.不能动.卡死的现象. 不过,后来我搞明白了 ...

  10. 手机号码生成器app,手机上用的

    手机号码生成器app,在日常的工作中可能会用到,它是用来找客人用的,不是生成了拿来做手机卡使用的,可能很多人会误解他的功能. 其实他的操作并不复杂,大体分为三步. 第一步,选择省份城市比如我们选择了甘 ...