[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的标准库提供 ...
随机推荐
- 利用jquery实现前端同步请求---判断姓名是否为空并设置事件
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html& ...
- PHP strstr 字符串函数
定义和用法 strstr - 查找字符串的首次出现 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 V5.3.0 新增可选的 before_needle 参数. V4.3.0 strstr( ...
- 大数据相关概念和hdfs
大数据 概述 大数据是新处理模式才能具备更多的决策力,洞察力,流程优化能力,来适应海量高增长率,多样化的数据资产. 大数据面临的问题 怎么存储海量数据(kb,mb,gb,tb,pb,eb,zb) 怎么 ...
- JS(TS)中数组常见的方法(未完待续)
push():向数组末尾添加一个或多个元素 unshift(): 向数组的开头添加一个或多个元素 pop(): 删除数组最后一个元素 shift(): 删除数组第一个元素 sort(): 给数组排序 ...
- arcgis api 4.x for js 集成 Echarts4 实现模拟迁徙图效果(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...
- cesium 入门开发系列地图鹰眼功能(附源码下载)
前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 结合 leaflet 实现 ...
- JS While
JS While 只要指定条件为 true,循环就可以一直执行代码. while 循环 While 循环会在指定条件为真时循环执行代码块. 语法 while (条件) { 需要执行的代码 } whil ...
- 关于ImageView的几个常见问题
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/173 最近几天碰到了ImageView的backgroun ...
- Python对MySql增删改查
pip install pymysql import pymysql db_config = { 'host': '127.0.0.1(ip)', 'port': 3306, 'user': '账号' ...
- Docker启动守护式容器
目录 启动守护式容器 查看容器日志 docker后台运行 查看容器内运行的进程 查看容器内部细节 进入正在运行的容器并以命令行交互 重新进入 上述两个区别 从容器内拷贝文件到主机上 启动守护式容器 ...