进程中的事件

news/2024/7/7 15:55:52
# 可控制 多个进程 同时 执行或阻塞

# 事件
    # set 和 clear
        # 分别用来修改一个事件的状态,True或者False,True表示设置为非阻塞,False表示设置为阻塞

    # is_set 查看一个事件的状态
    # wait 根据事件状态来决定自己是否阻塞

# from multiprocessing import Event   # 导入多进程的事件模块
#
# # 一个信号可以使所有的进程都进入阻塞状态,也可控制所有的进程解除阻塞
# # 一个事件被创建之后,默认是阻塞状态
#
# e = Event() # 创建了一个事件,创建之初这个事件是阻塞状态
#
# print(e.is_set())  #查看一个事件的状态   ,默认是阻塞的    False
# print(123456)
# e.set() # 将这个事件的状态改为True,设置为非阻塞
# print(e.is_set())   # True
# e.wait()    # 根据e.is_set()的返回值来决定是否阻塞,如果事件被设置为阻塞,则在这里是会被阻塞的,阻塞在这里等待事件变为True(非阻塞),如果事件被设置为非阻塞,则在这里不会阻塞
# print(8765432)
# e.clear()   # 将事件的状态改为False,设置为阻塞
# e.wait()    #   如果事件设置为阻塞,则阻塞在这里,阻塞在这里等待事件变为True(非阻塞),如果事件为非阻塞状态,则不阻塞在这里
# print(667777)




# 红绿灯事件

import time
import random
from multiprocessing import Event
from multiprocessing import Process

def cars(i, e):
    '''
    如果红灯亮了,等红灯,红灯结束了,则车通行
    灯在另外一个进程中,车如何感知到灯呢,这里用到了事件
    :return:
    '''
    while True:
        if not e.is_set():  # 如果事件为阻塞,说明红灯亮了,
            print('%s 车等待红灯' % i)
            e.wait()
        print('\033[0;32;40m %s 车通行\033[0m' % i)
        time.sleep(0.5)

def light(e):
    while True:
        if e.is_set():
            e.clear()  # 绿灯亮了2S后,设置事件为False,设置事件为阻塞,绿灯不亮了,车不可以行驶
            print('\033[31m红灯亮了\033[0m')  # 红灯亮时事件为Flase,表事件阻塞
        else:
            e.set() # 红灯亮了2S后,设置事件为非阻塞True,非阻塞,红灯不亮了车可以行驶
            print('\033[32m绿灯亮了\033[0m')  # 绿灯亮时事件为True,表事件非阻塞
        time.sleep(2)


if __name__ == '__main__':
    e = Event()
    traffic = Process(target=light, args=(e,))
    traffic.start()
    for i in range(10):
        car = Process(target=cars, args=(i, e))
        car.start()
        time.sleep(random.random())

 

转载于:https://www.cnblogs.com/whylinux/p/9819279.html


http://www.niftyadmin.cn/n/4582051.html

相关文章

UML与软件开发的关系

我们都知道软件工程是由于软件危机而产生的一门具有科学化开发方法的一门学科。 经典的软件工程思想将软件开发分成以下五个阶段:需求捕获(Requirement Capture)阶段、系统分析与设计(System Analysis And Design)阶段…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求: 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF ,实现全网互通 3、为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

LeetCode03 最长无重复子串

题目 给定一个字符串,找出不含有重复字符的最长子串的长度。 解答 刚开始以为只是一遍遍历后来的字符和前面一样便开始算新子串,给的案例都过了,但是卡在了“dvdf” 后来经过重重试验,暴力循环,不断调整变量作用域&…

deepin系统使用deepin-wine安装exe程序

2019独角兽企业重金招聘Python工程师标准>>> deepin自带原生deepin-wine使用命令如下: deepin-wine QQBrowser.exe deepin-wine QQMusicSetup.exe 默认安装的快捷方式位置: /root/.wine/drive_c/Program Files/Tencent/QQBrowser /home/he/.w…

学英语,累了,困了,不能就那么睡了。

在中国很多人都会英语,而且很多人也能和外国人进行流畅的交流,由于学习方法,学习效率,学习努力程度不同,所以达到英语流畅交流的时间就不一样。但至少让我们知道英语so easy的。在这个互联网时代,英语以其简…

用Python开发一款王者荣耀的“脚本”!上王者轻轻松!

https://blog.csdn.net/qq_42156420/article/details/80496607?utm_sourceblogkpcl1

Metasploit框架问题

1、使用nmap 扫描SMB服务漏洞信息 nmap -P0 --scriptsmb-check-vulns 10.10.15.123 2、sql语句绕过后台 这部分我待会补充 只有尽可能的过滤,没有绝对的过滤。所以说构造sql语句至关重要 转载于:https://www.cnblogs.com/xinxianquan/p/9773422.html

UML九种图

UML,统一建模语言,刚开始学UML 的时候我就在想 UML这些个图都在软件工程的什么阶段使用呢?是在概要设计还是用户分析之后?不知道大家有没有这个问题。然而遇到了问题,我就去上网查了查相关的资料,一般是在系统分析阶段…