[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的标准库提供 ...
随机推荐
- JS基础语法---内置对象
js学习中三种对象: 内置对象----js系统自带的对象 自定义对象---自己定义的构造函数创建的对象 浏览器对象---BOM的时候讲 内置对象: Math Date String Array Obj ...
- arcgis api 4.x for js 基础工具篇之测距测面
前言 在搭建好WebGIS应用框架的时候,相信大家首先开发的都会是基础功能,此篇文章我们主要讲述的是“测距”."测面"功能. 注* 在测量单位中常规都是基于"平面坐标系& ...
- iOS-基于TCP连接<Scoket-客户端>
一:前言(本文为TCP客户端) TCP首先要服务器开放一个端口 然后客户端去连接服务端的IP地址和端口号 连接成功之后再进行数据传输 要经历三次握手 二:代码在GitHub 1.需要的工具类 自行下载 ...
- iOS与JS交互-WKWebView
iOS移动端应用中,一般都会嵌入网页,在网页中处理的结果需要反馈给iOS让移动端做出相应的处理(例如页面跳转), 1.webview的配置 2.代理方法中拿到事件进行处理 二.JS中的配套出发事件 当 ...
- [20191119]探究ipcs命令输出.txt
[20191119]探究ipcs命令输出.txt $ man ipcsIPCS(8) Linux Programmer's Manual ...
- MyBtis之关于#{}和${}
1.${}的用法的mapper文件配置: </select> <select id="selById2" resultType="com.sus ...
- python连数据库制作音乐软件
import pymysql conn = pymysql.connect(host="localhost",user="root",password=&quo ...
- 远程访问阿里云服务器jupyter
官网链接 一.pip安装jupyter安装Anaconda的话,会自动按照jupyter,就不需要再使用pip安装了 pip3 install jupyter 二.生成jupyter notebook ...
- Pycharm界面的子窗口不见了,怎么办?
pycharm程序界面一般有很多子窗口,如图1所示. 图1 Pycharm子窗口 如果你发现某些子窗口不见了,图2是最过分的情形,无须担心. 图2 Pycharm界面的子窗口不见了 打开项目视图子 ...
- 异常类的构建——顶层父类Exception的实现
异常类构建异常的类型可以是自定义类类型对于类类型异常的匹配依旧是从上到下严格的匹配赋值兼容性原则在异常匹配中依然适用一般而言-匹配子类异常的catch放在上部-匹配父类异常的catch放在下部 现代C ...