python语法基础-并发编程-线程-其他
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python语法基础-并发编程-线程-其他,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2082字,纯文字阅读大概需要3分钟。
内容图文
![python语法基础-并发编程-线程-其他](/upload/InfoBanner/zyjiaocheng/641/49c4e2d176844c0a9c2f570aab8597d3.jpg)
############### 信号量和事件 ##############
# 信号量 # 信号量就是控制只能有n个线程能访问这段代码 # from threading import Semaphore,Thread # import time # def func(sem,a,b): # sem.acquire() # time.sleep(1) # print(a+b) # sem.release() # # sem = Semaphore(4) # for i in range(10): # t = Thread(target=func,args=(sem,i,i+5)) # t.start() # 事件: # 事件被创建的时候是false状态,这个false状态会导致wait被阻塞, # true状态的时候,wait就不阻塞了 # clear,设置为false # set,设置状态未false, # 上次举例的是红绿灯的例子, # 现在我们举一个例子,检测数据库的可连接情况 # 启动两个线程, # 第一个线程连接数据库, # 等待一个信号,告诉我们之间的网络是通的 # 第二个线程,检测和数据自己之间的网络是否是通的 # 通了之后把事件的状态改为true, import time,random from threading import Thread,Event def connect_db(e): count = 0 while count < 3: # e.wait() # 这个是一直等待,这种比较浪费资源, e.wait(0.1) # 这是我只等待1秒,否则我就不等你了,# 但是我应该有一个重连的过程,比如三次,三次都连接不上,就断掉了 if e.is_set() == True: print("连接数据库") break else: print("连接失败") count += 1 else: raise TimeoutError("数据库连接超时") # 主动报异常 def check_web(e): time.sleep(random.randint(0,2)) e.set() e = Event() t1 = Thread(target=connect_db,args=(e,)) t2 = Thread(target=check_web,args=(e,)) t1.start() t2.start()
############### 线程的条件和定时器 ##############
# 条件 from threading import Condition,Thread,Timer # 可以把条件视为一个更加复杂的锁 # 同时也有两个方法,acquire,release # 一个条件被创建,默认也是一个false状态,会影响wait处于等待状态 # notify(int),这是制造钥匙,参数是制造多少把钥匙 # 这个几乎就是只会出现在面试里面,平时基本不会用到, # # def func(con,i): # con.acquire() # con.wait() # 在等待钥匙, # print("在第%s个循环里"%i) # con.release() # # # con = Condition() # for i in range(10): # Thread(target=func,args=(con,i)).start() # # # while True: # num = int(input(">>>")) # con.acquire() # con.notify(num) # 制造钥匙, # con.release() # 定时器: def func(): print("时间同步") Timer(2,func).start() # 等待两秒钟开启一个线程,
内容总结
以上是互联网集市为您收集整理的python语法基础-并发编程-线程-其他全部内容,希望文章能够帮你解决python语法基础-并发编程-线程-其他所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。