50_并发编程-线程-事件

Posted hq82

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50_并发编程-线程-事件相关的知识,希望对你有一定的参考价值。

一、定义
    
  如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。
  事件的方法:
技术分享图片
1 event = Event()    # 默认状态为False
2 event.isSet()    # 返回event的状态值
3 event.wait()    # 如果event.isSet()==False将阻塞线程
4 event.set()    # 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态,等待操作系统调度
5 event.clear()    # 回复event的状态为False
事件方法

二、实例

  首先起两个线程:
    第一个线程的用处:连接数据库,那么我这个线程需要等待一个信号,告诉我我们之间的网络是可以连通的。
    第二个线程的用处:检测与数据库之间的网络是否联通,并发送一个可联通或者不可联通的信号。
技术分享图片
 1 from threading import Thread,Event
 2 import threading
 3 import time,random
 4 def conn_mysql():
 5     count=1
 6     while not event.is_set():
 7         if count > 3:
 8             raise TimeoutError(链接超时) #自己发起错误
 9         print(<%s>第%s次尝试链接 % (threading.current_thread().getName(), count))
10         event.wait(0.5) #
11         count+=1
12     print(<%s>链接成功 %threading.current_thread().getName())
13 
14 
15 def check_mysql():
16     print(33[45m[%s]正在检查mysql33[0m % threading.current_thread().getName())
17     t1 = random.randint(0,3)
18     print(>>>>,t1)
19     time.sleep(t1)
20     event.set()
21 if __name__ == __main__:
22     event=Event()
23     check = Thread(target=check_mysql)
24     conn1=Thread(target=conn_mysql)
25     conn2=Thread(target=conn_mysql)
26 
27     check.start()
28     conn1.start()
29     conn2.start()
View Code

 

以上是关于50_并发编程-线程-事件的主要内容,如果未能解决你的问题,请参考以下文章

Python3 与 C# 并发编程之~ 上篇

并发编程——GIL全局解释器锁死锁现象与递归锁信号量Event事件线程queue

54_并发编程-线程-守护线程

49_并发编程-线程-守护进程

gj13 asyncio并发编程

并发编程之Event事件