# -*- 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. 简约清新日系你好五月通用PPT模板推荐

    模版来源:http://ppt.dede58.com/peixunyanjiang/26488.html

  2. PHP bcpow BC数学函数

    定义和用法 bcpow - 任意精度数字的乘方 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 bcpow( string $left_operand , string $right_ ...

  3. es6 之class介绍

    class ECMAScript 2015 中引入的 JavaScript 类实质上是 JavaScript 现有的基于原型的继承的语法糖.类语法不会为JavaScript引入新的面向对象的继承模型. ...

  4. Beyond Compare 4.X 破解方法(亲测有效)

    Windows下Beyond Compare 4 30天评估到期了的话,可以尝试下面两种方式: 破解方式把Beyond Compare 4安装文件夹下面的BCUnrar.dll文件删掉就行了,但是这种 ...

  5. 【转载】Android绘图之Path总结

    Path作为Android中一种相对复杂的绘图方式,官方文档中的有些解释并不是很好理解,这里作一个相对全面一些的总结,供日后查看,也分享给大家,共同进步. 1.基本绘图方法 addArc(RectF ...

  6. HTML5播放视频,并使用ffmpeg对视频转编码

    网页加入视频可以用h5自带的video标签,这里用一个jQuery封装优化好的video视频组件videojs. videojs官方网站:https://docs.videojs.com/index. ...

  7. 微信小程序实现点击拍照长按录像功能

    微信小程序实现点击拍照长按录像功能 代码里面注释写的都很详细,直接上代码.官方的组件属性中有触摸开始和触摸结束属性.本功能依靠这些属性实现. .wxml代码: <!-- 相机 pages/cam ...

  8. python的路径问题

    ## 文件路径出错问题 """ 如何获取与当前文件相关的地址 """ import os # 当前文件的完整路径 print(__file_ ...

  9. 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)

    找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...

  10. STM32 F4xx Fault 异常错误定位指南

    STM32 F407 采用 Cortex-M4 的内核,该内核的 Fault 异常可以捕获非法的内存访问和非法的编程行为.Fault异常能够检测到以下几类非法行为: 总线 Fault: 在取址.数据读 ...