python 锁 信号量 事件 队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 锁 信号量 事件 队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2231字,纯文字阅读大概需要4分钟。
内容图文
![python 锁 信号量 事件 队列](/upload/InfoBanner/zyjiaocheng/849/ae2d1dc3a12745669e6c92eb5d5a5ecc.jpg)
什么是python 进程锁?
#同步效率低,但是保证了数据安全 重点
很多时候,我们需要在多个进程中同时写一个文件,如果不加锁机制,就会导致写文件错乱
这个时候,我们可以使用multiprocessing.Lock()
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022813.jpg)
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022913.jpg)
def get_ticket(i,ticket_lock): print("等待大家都到齐") time.sleep(1) ticket_lock.acquire() with open("ticket","r")as f: # for line in f: # dic=json.load(line.strip()) dic=json.load(f) if dic["count"]>0: time.sleep(random.random()) dic["count"]-=1 with open("ticket","w")as s_f: json.dump(dic,s_f) print("%s号抢到票了"%i) else: print("%s号没抢到票,明年见" % i) ticket_lock.release() if __name__ == '__main__': ticket_lock=Lock() for i in range(1,11): p=Process(target=get_ticket,args=(i,ticket_lock,)) p.start()抢票小模拟
什么是信号量?
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022813.jpg)
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022913.jpg)
# 红绿灯事件 import time import random from multiprocessing import Event,Process def cars(e,i): if not e.is_set(): print('car%i在等待'%i) e.wait() # 阻塞 直到得到一个 事件状态变成 True 的信号 print('\033[0;32;40mcar%i通过\033[0m' % i) def light(e): while True: if e.is_set():#判断事件状态 e.clear() print('\033[31m红灯亮了\033[0m') else: e.set() print('\033[32m绿灯亮了\033[0m') time.sleep(2) if __name__ == '__main__': e = Event() traffic = Process(target=light,args=(e,)) traffic.start() for i in range(20): car = Process(target=cars, args=(e,i)) car.start() time.sleep(random.random())红绿灯模拟
事件
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022813.jpg)
![python 锁 信号量 事件 队列 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506024022913.jpg)
# coding:utf-8 import threading import time event = threading.Event() def chihuoguo(name): # 等待事件,进入等待阻塞状态 print '%s 已经启动' % threading.currentThread().getName() print '小伙伴 %s 已经进入就餐状态!'%name time.sleep(1) event.wait() # 收到事件后进入运行状态 print '%s 收到通知了.' % threading.currentThread().getName() print '小伙伴 %s 开始吃咯!'%name # 设置线程组 threads = [] # 创建新线程 thread1 = threading.Thread(target=chihuoguo, args=("a", )) thread2 = threading.Thread(target=chihuoguo, args=("b", )) # 添加到线程组 threads.append(thread1) threads.append(thread2) # 开启线程 for thread in threads: thread.start() time.sleep(0.1) # 发送事件通知 print '主线程通知小伙伴开吃咯!'event.set() 运行结果: Thread-1 已经启动 小伙伴 a 已经进入就餐状态! Thread-2 已经启动 小伙伴 b 已经进入就餐状态! 主线程通知小伙伴开吃咯! Thread-1 收到通知了. 小伙伴 a 开始吃咯! Thread-2 收到通知了. 小伙伴 b 开始吃咯!事件
内容总结
以上是互联网集市为您收集整理的python 锁 信号量 事件 队列全部内容,希望文章能够帮你解决python 锁 信号量 事件 队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。