五.并发编程 (线程事件)

一. 线程事件(Event)

1. 线程事件方法等

事件对象管理一个内部标志,通过set()方法将其设置为True,并使用clear()方法将其设置为False。wait()方法阻塞,直到标志为True。该标志初始为False。
方法:
is_set()
当且仅当内部标志为True时返回True。
set()
将内部标志设置为True。所有等待它成为True的线程都被唤醒。当标志保持在True的状态时,线程调用wait()是不会阻塞的。
clear()
将内部标志重置为False。随后,调用wait()的线程将阻塞,直到另一个线程调用set()将内部标志重新设置为True。
wait(timeout=None)
阻塞直到内部标志为真。如果内部标志在wait()方法调用时为True,则立即返回。否则,则阻塞,直到另一个线程调用set()将标志设置为True,或发生超时。
该方法总是返回True,除非设置了timeout并发生超时。
from  threading import Thread,Event
import time

def db(e):
    e.wait()  # 默认是false
    if e.is_set()==True:
        print("连接成功了哈哈哈")

def web(e):
    print("数据网络开始正常")
    time.sleep(1)
    e.set()    # #执行set则为开启状态  True

e=Event()
p=Thread(target=web,args=(e,))
p1=Thread(target=db,args=(e,))
p.start()
p1.start()

# 数据网络开始正常
# 连接成功了哈哈哈
# 
# 进程已结束,退出代码 0
import threading,time

event = threading.Event() # '''事件默认是关闭状态,执行set则为开启状态''
def a():
    print("我是第一个线程函数a,我在等待函数b来触发我...")
    event.wait()       #  默认是Fale 开启后就是True
    print("函数a说:尼玛!我被函数b给触发了...")

def b():
    print("我是第二个线程函数b,我开始去触发函数a...")
    time.sleep(1)
    event.set()  # #执行set则为开启状态  True


p = threading.Thread(target=a)
c = threading.Thread(target=b)
p.start()
c.start()
# 
# 我是第一个线程函数a,我在等待函数b来触发我...
# 我是第二个线程函数b,我开始去触发函数a...
# 函数a说:尼玛!我被函数b给触发了...
用事件连接数据

from
threading import Thread,Event import time def db(e): count=0 while count<3: e.wait() # 默认是false if e.is_set()==True: print("连接成功了哈哈哈") break else: count+=1 print("你数据库连接%s失败"%count) else: raise TimeoutError("连接超时!!!!!!!!!!!!") def web(e): print("数据网络开始正常") time.sleep(1) e.set() # #执行set则为开启状态 True e=Event() p=Thread(target=web,args=(e,)) p1=Thread(target=db,args=(e,)) p.start() p1.start() # 数据网络开始正常 # 连接成功了哈哈哈 # # 进程已结束,退出代码 0

 

转载于:https://www.cnblogs.com/Sup-to/p/11206742.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值