# -*- 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. 创建线程之三:实现Callable接口

    通过Callable和Future创建线程 i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常. ii. 创建Callable实现类 ...

  2. 机器学习pipeline总结

    # -*- coding: utf-8 -*- """scikit-learn introduction Automatically generated by Colab ...

  3. HDFS与YARN HA部署配置文件

    core-site.xml <!--Yarn 需要使用 fs.defaultFS 指定NameNode URI --> <property> <name>fs.de ...

  4. Python对 Excel 的常用操作

    几个常用的对象 Workbook:工作簿,一个包含多个Sheet的Excel文件 Worksheet:工作表,一个Workbook有多个Worksheet,如"Sheet1",&q ...

  5. LInux:YUM源安装工具的配置及使用

    YUM源的设置及使用 YUM工具简介 (1)YUM(Yellow dog Upadate Modifie)是改进版的 RPM 管理器,很好地解决了 RPM 软件包的依赖问题. (2)YUM 可以从很多 ...

  6. 我的朋友&值得学习的大佬

    @media only screen and (max-width: 360px) { #friedsGroup { columns: 1 !important; } } #MySignature{ ...

  7. vue--npm的使用

    npm介绍 NPM 全称 Node Package Manager,它是 JavaScript 的包管理工具, 并且是 Node.js 平台的默认包管理工具.通过NPM 可以安装.共享.分发代码,管理 ...

  8. iOS: 本地通知的前后变化(iOS10)

    一.介绍  通知和推送是应用程序中很重要的组成部分.本地通知可以为应用程序注册一些定时任务,例如闹钟.定时提醒等.远程推送则更强大,提供了一种通过服务端主动推送消息到客户端的方式,服务端可以更加灵活地 ...

  9. css 如何让大小不同的图片表现一致,同时自适应呢?

     壹 ❀ 引 实习生在做产品分类页时,遇到了一个她不知道如何解决问题,所以来问我应该怎么做:问题其实不难,由于项目使用了bootstrap来实现响应式与自适应,所以除了宽度有明确的百分比值之外(栅格化 ...

  10. 前端 用http-server启动本地服务器

    附:http-server详细介绍,包括参数等:  https://www.npmjs.com/package/http-server 开始: 准备node.js环境: 在我的博文“  Vue.js学 ...