python前景如何调用带有event参数的方法_python之event【事件】

# 线程之间用于交互的一个对象,这个event是一个内部的标签,线程可以等待这个标签的状态

#举个例子,比如红绿灯是一个线程,三辆汽车是3个线程,如果为红灯,则三个汽车的线程必须

#要停止,如果是绿灯,则三个汽车的线程就可以跑起来

import threading

#创建一个事件

event = threading.Event()

#如果标签没有设置,则线程会一直等待,直到标签的状态被设置,如果设定了标签,则这里的

#wait就不阻塞了,该动作什么都不做,如果没有设置,则该wait这里就一直阻塞,无论有多线程

#都可以等待一个事件

# event.wait()

#设定标签和清空标签

event.set()

event.clear()

#下面是一个红绿灯例子,很有意思

# import threading

# import time

# import random

# def light():

# #定义了一个灯的函数

# if not event.is_set(): #如果事件未定义,则设置该标签,设置该标签,则如果有线程在等待这个标签,就不会出现阻塞,也就是说初始状态是绿灯

# event.set()

# count = 0

# while True:

# if count < 10:

# #如果事件小于10,则不对事件做任何处理

# print("\033[42;1m----green light on----\033[0m")

# elif count < 15:

# #如果事件小于15,则不对事件做任何处理

# print("\033[43;1m----yellow light on----\033[0m")

# elif count < 20:

# #如果事件小于20,也就是说如果时间在15和20之间,则进入红灯状态,如果是红灯状态,则汽车就要阻塞,要实现阻塞,我们就需要对事件设置状态

# if event.is_set():

# event.clear()

# print("\033[41;1m----red light on----\033[0m")

# else:

# count = 0

# event.set()

# time.sleep(1)

# count += 1

#

# def car(n):

# while 1:

# time.sleep(1)

# if event.is_set():

# #如果事件设置了状态,则后面的语句不阻塞,照常执行

# print("cat [%(name)s] is running" %{"name":n})

# else:

# event.wait()

# #如果这个时间没有设置状态,则该事件一直阻塞在这里,等待该事件被设置状态

# print("cat [%(name)s] is wait for red light" % {"name": n})

#

# if __name__ == ‘__main__‘:

# event = threading.Event()

# Light = threading.Thread(target=light)

# Light.start()

# for i in range(3):

# t = threading.Thread(target=car,args=[i,])

# t.start()

#

import threading

import time

import random

# 1、我们先定义一个灯的函数,由灯的线程去调用这个函数,绿灯是允许通过,红灯是不允许通过,其中绿灯10s,红灯也是10s,这里我们就要用到事件

# 如果是绿灯,我们则设置事件的状态,如果是红灯,我们则取消事件的状态,初始状态为红灯

def light():

if event.is_set():

#设置初始状态,该初始状态为事件没有状态,则进程一直会阻塞

event.clear()

count = 0

while True:

#进入交通灯灯循环的状态

if count < 10:

print("\033[41;1m----red light on----\033[0m")

elif count < 20:

print("\033[42;1m----green light on----\033[0m")

if not event.is_set():

event.set()

else:

pass

else:

count = 0

if event.is_set():

event.clear()

count += 1

time.sleep(1)

def car(n):

while True:

time.sleep(1)

if event.is_set():

print("car [%(name)s] is running" %{"name":n})

else:

print("car [%(name)s] is waiting for red light" % {"name": n})

event.wait()

# 2、我们在定义一个车的函数,由车的线程去调用这个函数

if __name__ == ‘__main__‘:

light_thread = threading.Thread(target=light)

light_thread.start()

for i in range(3):

t = threading.Thread(target=car, args=[i,])

t.start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值