# -*- coding: utf-8 -*-
"""
多进程 同步 事件multiprocessing.Event 逻辑:
子线程负责打印,会阻塞, 等待主进程发出控制信号 以便继续 总结:
个人理解, multiprocessing.Event 中维护了一个boolean变量,初始值为Fasle
e.wait() 如果为Fasle会阻塞,True继续执行 ,
set() 将值设置为True
clear() 将值设置为False
is_set() 查看 不确定是否支持多个子进程同时e.wait()阻塞中,然后主进程 set()后 全部唤醒 使用:
1. 创建事件对象 e = multiprocessing.Event()
2. e传给子进程,在进程中 e.wait([secondes]) 阻塞
3. 在另外的进程中 e.set() 通知阻塞的进程不要阻塞了
4. 必要时 e.clear() 恢复初始值 """
import multiprocessing
import time # case1
def wait_for_event(e):
print("wait_for_event: starting") # 一直等到e.set()在某个进程中执行
e.wait() print("wairt_for_event: e.is_set()->" + str(e.is_set())) # case2
def wait_for_event_timeout(e, t):
print("wait_for_event_timeout:starting") # 等到e.set()在某个进程中执行 或者时间t到了
e.wait(t) print("wait_for_event_timeout:e.is_set->" + str(e.is_set())) if __name__ == "__main__": # 创建事件对象,初始值 无效
e = multiprocessing.Event() ## case 1 一直等待
multiprocessing.Process(name="block", target=wait_for_event, args=(e,)).start() time.sleep(3) print "set"
e.set() # 设置事件有效,此时执行e.wait()的子进程接触阻塞
print e.is_set() # 查看事件是否有效 time.sleep(0.1)
print "clear"
e.clear() # 设置事件无效
print e.is_set() ## case 2 最多等待2秒
print "------case2"
multiprocessing.Process(name="non-block", target=wait_for_event_timeout, args=(e, 2)).start() time.sleep(3) print "end"
print e.is_set() """
Out:
wait_for_event: starting
set
True
wairt_for_event: e.is_set()->True
clear
False
------case2
wait_for_event_timeout:starting
wait_for_event_timeout:e.is_set->False
end
False
"""

[b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event的更多相关文章

  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. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...

  5. [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock

    # -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...

  6. [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue

    1  队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...

  7. [b0031] python 归纳 (十六)_线程同步_锁

    # -*- coding: utf-8 -*- """ 学习 多线程同步 使用锁 threading.Lock() 逻辑: 2 个线程,操作同一个整型变量,一个加法,另外 ...

  8. [b0016] python 归纳 (二)_静态方法和类方法

    # -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...

  9. Python爬虫进阶六之多进程的用法

    前言 在上一节中介绍了thread多线程库.python中的多线程其实并不是真正的多线程,并不能做到充分利用多核CPU资源. 如果想要充分利用,在python中大部分情况需要使用多进程,那么这个包就叫 ...

随机推荐

  1. 松软科技前端课堂:JavaScript 对象

    真实生活中的对象.属性和方法 在真实生活中,汽车是一个对象. 汽车有诸如车重和颜色等属性,也有诸如启动和停止的方法: 对象 属性 方法   car.name = porsche car.model = ...

  2. 037.[转] springboot 配置多个数据源

    1.在application.properties文件 配置两个数据源 #默认使用 tomcat-jdbc spring.datasource.type=org.apache.tomcat.jdbc. ...

  3. springboot进入html

    话不多说,转载 https://blog.csdn.net/sinat_33889619/article/details/78339042 这个博客写的真好

  4. nginx实现基础web

    目录 nginx实现基础web 什么是lnmp lnmp架构如何工作 Nginx与Fast-CGO详细工作流程 LNMP环境准备 一,部署LNMP 1.使用nginx官方源 2.创建nginx用户 3 ...

  5. VS中添加Web References

    鼠标右击项目->添加->服务引用->高级->添加Web引用->输入URL->点击前往 如下图所示:

  6. MySQL 57安装部署(Zip版)(Windows版)

    1. 在<MYSQL>的根目录下新建一个my.ini写入以下内容 [mysqld] port = 3306 basedir=D:\mysql\mysql-5.7.22-winx64 # M ...

  7. Git操作删除 untracked files

    最近使用git 管理项目的时候,编译过程中出现了很多中间文件,今天发现使用 git clean 命令可以很方便进行清除: # 删除 untracked files git clean -f # 连 u ...

  8. 不相交集ADT 你是和谁是一类人?

    //不相交集ADT (抽象数据类型) //一般用于集合运算 //用树,这种结构组成,有多个树(=森林) //属于同一颗数的元素,表示处于同一个集合中 //主要支持2个操作. //1. Find操作,找 ...

  9. spring mvc 源码简要分析

    关于web项目,运用比较多的是过滤器和拦截器 过滤器基于责任链设计模式 创建过滤器链 / Create the filter chain for this requestApplicationFilt ...

  10. leetcode 双周赛9 进击的骑士

    一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似,走 “日” 字:即先向左(或右 ...