[b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore
# -*- coding: utf-8 -*-
"""
多进程同步 使用信号量 multiprocessing.Semaphore 逻辑:
启动5个进程,打印,每个各自睡眠2秒
竞争2个锁大小的信号量,任何时候只有2个进程在执行打印 总结:
1、通过信号 实现了Pool的效果,任何时候最多只有2个进程在执行指定代码段
2、相当于创建了锁的数组,一次创建多把锁,绑定同一个名字
3、与RLock 有细微区别
RLock 同一个进程可以锁多次
Semaphore 多个不同进程可以同时各种获取锁 使用:
1、创建信号量 s = multiprocessing.Semaphore(2) 锁的个数
2、当做参数传给子进程
3、s.acquire() 锁定代码 a.release() 参考:
get_value() 返回信号量中还剩下多少把空闲锁
"""
import multiprocessing
import time # 子进程代码
def worker(s):
s.acquire() # 竞争锁
print(time.strftime('%M:%S', time.localtime(time.time())), multiprocessing.current_process().name + "acquire"); time.sleep(2) print(time.strftime('%M:%S', time.localtime(time.time())), multiprocessing.current_process().name + "release");
s.release() # 释放锁 if __name__ == "__main__":
# 创建有2个锁的信号量
s = multiprocessing.Semaphore(2) # 启动5个进程,实际进程1不一定比进程2先执行
for i in range(5):
p = multiprocessing.Process(target=worker, args=(s,))
p.start() time.sleep(15) """
Out: ('08:47', 'Process-2acquire')
('08:47', 'Process-4acquire')
('08:49', 'Process-2release')
('08:49', 'Process-3acquire')
('08:49', 'Process-4release')
('08:49', 'Process-1acquire')
('08:51', 'Process-3release')
('08:51', 'Process-5acquire')
('08:51', 'Process-1release')
('08:53', 'Process-5release') 解读: 47秒 有2个进程同时 执行
49秒 旧的2个进程完毕,新的2个进程开始了
"""
[b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore的更多相关文章
- [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 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制 ...
- [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock
# -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...
- [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue
1 队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...
- [b0030] python 归纳 (十五)_多进程使用Pool
1 usePool.py #coding: utf-8 """ 学习进程池使用 multiprocessing.Pool 总结: 1. Pool 池用于处理 多进程,并不 ...
- [b0016] python 归纳 (二)_静态方法和类方法
# -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...
- Python系列之多线程、多进程
线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供 ...
随机推荐
- CAD转PDF的软件哪个比较好用?用这两个很方便
大家都知道编辑CAD图纸是需要借助CAD制图软件来进行绘制的,而且CAD制图软件很多的设计师们都在使用.但是CAD中的图纸格式为dwg格式的,不想要使用CAD软件来查看图纸的话,就需要将CAD转换成P ...
- 用两种以上的 方式实现一个方法或者对象,调用时打印"你好xx",已定义的代码不能做修改,自己编译的不能出现"你好"? (Javasctript)
先上代码 const obj = { say(){ Array.from(arguments).forEach(item=>{ console.log(`${this.str} ${item}` ...
- Python复习 一
Python回炉复习 1 变量 Python的变量和C语言的变量书写方式类似: 书写要求 python程序编写结构利用缩进表示,抛弃花括号: 结构 分支: if(条件语句1): 执行语句块 else ...
- 一文解读MVC/MVP/MVVM (转)
这篇文章对目前 GUI 应用中的 MVC.MVP 和 MVVM 架构模式进行详细地介绍. MVC 在整个 GUI 编程领域,MVC 已经拥有将近 50 年的历史了.早在几十年前,Smalltalk-7 ...
- tensorflow dataloader 相关内容
Tensorflow dataloader 相关调研:数据读取是训练的开始,是非常关键的一步:下面是调研时搜集到的一些相关链接: 十图详解tensorflow数据读取机制 https://zhuanl ...
- JVM GC算法 垃圾回收器
JVM的垃圾回收算法有三种: 1.标记-清除(mark-sweep):啥都不说,直接上图 2.标记-整理(mark-compact) 3.复制(copy) 分代收集算法 ...
- Codeforces Round #578 (Div. 2)
Codeforces Round #578 (Div. 2) 传送门 A. Hotelier 暴力即可. Code #include <bits/stdc++.h> using names ...
- BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学
问题描述 BZOJ2339 本题的一些心得 对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化. 设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推 ...
- linux shell攻略学习笔记二
1.Cat命令 这么多命令,常用的 Cat –n file 显示文件以及行数 Cat - echo 'Text through stdin' | cat - file.txt Text throug ...
- WPF 精修篇 自定义控件
原文:WPF 精修篇 自定义控件 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件 ...