[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的标准库提供 ...
随机推荐
- log4j配置项
log4j 配置文件log4j.rootLogger=INFO,console,dailyFile# 控制台配置项log4j.appender.console=org.apache.log4j.Con ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 剑指offer 28:字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述 输入 ...
- springboot项目创建,及运行
1. File --> new --> spring Initializr(选择jdk,和默认的url)-->next-->通过dubbo调用的服务可以直接下一步,也可以选择w ...
- 25个JavaScript数组方法代码示例
摘要: 通过代码掌握数组方法. 原文:通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 要在给定数组上使用方法,只需要通 ...
- 利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)
前期准备 引入phpqrcode类库(下载地址:https://download.csdn.net/download/weixin_37557729/11891240:支持彩色二维码的下载地址:htt ...
- Django—版本和环境的搭建
1.安装 virtualenv virtualenvwrapper [root@localhost ~]# pip install virtualenv virtualenvwrapper 2.查找 ...
- [Linux] ubuntu环境安装和使用elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -apt-get install ap ...
- sakura设置桌面壁纸
下下载steam上的Wallpaper Engine 先将sakura.html下载为html文件. 再从文件打开 就保存了 再加载保存,就一直是了
- 【论文阅读】Second-order Attention Network for Single Image Super-Resolution
概要 近年来,深度卷积神经网络(CNNs)在单一图像超分辨率(SISR)中进行了广泛的探索,并获得了卓越的性能.但是,大多数现有的基于CNN的SISR方法主要聚焦于更宽或更深的体系结构设计上,而忽略了 ...