# -*- 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. 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. 今日遇到了这个坑,看似平白无奇. 首先,我定位到是数据库 ...

  2. 高性能go服务之高效内存分配

    高性能go服务之高效内存分配 手动内存管理真的很坑爹(如C C++),好在我们有强大的自动化系统能够管理内存分配和生命周期,从而解放我们的双手. 但是呢,如果你想通过调整JVM垃圾回收器参数或者是优化 ...

  3. nginx 七层负载均衡

    [tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...

  4. 关于一道fork生成子进程的题目

    题目如下: pid_t pid1,pid2; pid1=fork(); pid2=fork(); ||pid2<) { printf("Fork Failed\n"); } ...

  5. go语言设计模式之Concurrency workers pool

    worker.go package main import ( "fmt" "strings" ) type WorkerLauncher interface ...

  6. 断点调试debugger

    断点调试有两种打点方式 (1)控制台手动打点 (2)代码中添加 debugger打点 .

  7. WPF 获取系统 DPI 的多种方法

    原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...

  8. 【转】SQL中GROUP BY语句与HAVING语句的使用

    一.GROUP BY GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来得到一个或多个列 ...

  9. Codechef October Challenge 2019 Division 1

    Preface 这次CC难度较上两场升高了许多,后面两题都只能借着曲明姐姐和jz姐姐的仙气来做 值得一提的是原来的F大概需要大力分类讨论,结果我写了一大半题目就因为原题被ban了233 最后勉强涨了近 ...

  10. clientHeight—scrollHeight—offsetHeight三者的区别

    clientHeight,scrollHeight,offsetHeight 这三个dom属性有时让人觉得相似但又不相似 以前对它们的理解也有一些模糊,现在总结一下,方便以后复习 clientHeig ...