锁机制,信号机制及事件机制

  在多进程运行处理数据时,会出现争夺资源到时数据混乱的现象,为了避免数据混乱,这里就引入了锁机制:

锁机制:引入Lock模块,l = Lock()在子进程中,l.acquire()表示取到钥匙,锁上门进行数据处理;l.release()表示归还钥匙打开门,让下一个进程进行操作.

信号机制:能够将一把锁配置多把钥匙,能够让多个进程同时进行操作.导入Semaphore模块,sem = Semaphore(n)中的n是int型,表示可以同时进行操作的子程序数.

事件机制:导入Event模块,e.is_set()初始值是False,e.wait()判断is_set()的布尔值,如果是True就实现非阻塞状态,如果是Flaser则是实现阻塞状态(能顾实现一个子进程控制另一个子进程的执行).e.set()将is_set()设为True,e.clear()将其设为False

下面举几个例子说明:

"""12306抢票的例子(Lock)锁机制"""
from multiprocessing import Process,Lock
import time

def check(i):
    with open("lest")as f:
        conn = int(f.read())
        print("第%s个人查到还剩%s张票" % (i,conn))

def buy_(i,l):
    l.acquire()
    with open("lest")as f:
        conn = int(f.read())
        if conn > 0:
            print("第%s个人买到了票" % i)
            conn -= 1
        else:
            print("第%s个人没有买到票" % i)
    time.sleep(0.5)
    with open("lest","w")as f1:
        f1.write(str(conn))
        f1.close()
    l.release()

if __name__ == ‘__main__‘:
    l = Lock()
    for i in range(5):
        p = Process(target=check,args=(i+1,))
        p.start()
        p1 = Process(target=buy_,args=(i+1,l))
        p1.start()
"""红绿灯的例子(事件机制)"""
from multiprocessing import Process,Event
import time

def light(e):
    while 1:
        if e.is_set():
            time.sleep(3)
            print("红灯亮")
            e.clear()
        else:
            time.sleep(3)
            print("绿灯亮")
            e.set()

def car(i,e):
    e.wait()
    print("第%s辆车通过" % i)

if __name__ == ‘__main__‘:
    e = Event()
    light_ = Process(target=light,args=(e,))
    light_.start()
    for i in range(20):
        time.sleep(0.5)
        car_ = Process(target=car,args=(i+1,e))
        car_.start()
"""小黑屋例子(Semaphore(n)信号机制)"""
from multiprocessing import Process,Semaphore
import time

def func(i,sem):
    sem.acquire()
    print("第%s个人来了" % i)
    time.sleep(3)
    print("第%s个人又走了" % i)
    sem.release()

if __name__ == ‘__main__‘:
    sem = Semaphore(3)
    for i in range(10):
        p = Process(target=func,args=(i+1,sem))
        p.start()
"""存钱取钱的例子(Lock,Value)"""
from multiprocessing import Process,Lock,Value

def get(num,l,s):
    l.acquire()
    num.value -= int(s)
    l.release()

def put(num,l,s1):
    l.acquire()
    num.value += int(s1)
    l.release()

if __name__ == ‘__main__‘:
    num = Value("i",100)
    s = input("取钱:")
    s1 = input("存钱:")
    l = Lock()
    p = Process(target=get,args=(num,l,int(s)))
    p.start()
    p.join()
    p1 = Process(target=put,args=(num,l,int(s1)))
    p1.start()
    p1.join()
    print(num.value)

原文地址:https://www.cnblogs.com/smile568968/p/9513364.html

时间: 2024-11-05 21:57:22

锁机制,信号机制及事件机制的相关文章

QT开发(六十三)——QT事件机制分析

QT开发(六十三)--QT事件机制分析 一.事件机制 事件是由系统或者QT平台本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事件则是由系统自动发出,如计时器事件. 事件的出现,使得程序代码不会按照原始的线性顺序执行.线性顺序的程序设计风格不适合处理复杂的用户交互,如用户交互过程中,用户点击"打开文件"将开始执行打开文件的操作,用户点击"保存文件"将开始执

Atitit.事件机制 与 消息机制的联系与区别

1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方称之为(Message).1 2. 发布/订阅模式1 3. 事件是侵入式设计,霸占你的主循环:消息是非侵入式设计,将主循环该怎样设计的自由留给用户.1 3.1. 事件越如 框架,消息相像类库2 3.2. 事件比消息封装的更高一层2 4. 消息队列和事件触发的区别,本质是没啥区别的2 5. 事件机制与消息机制2 1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方

在Unity3D中基于订阅者模式实现事件机制

??各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com.今天博主想和大家分享的是在Unity3D中基于订阅者模式实现消息传递机制,我们知道Unity3D中默认提供了一种消息传递机制SendMessage,虽然SendMessage使用起来的确非常简单,可是它的这种简单是建立在付出一定的代价的基础上的.经常有朋友提及不同的模块间如何进行通信的问题,可能答案最终会落到单例模式.委托和事件机制这些关键词上,在这种情况下本文所探讨的内容可能会帮助

my java note ---- 事件机制

# java 事件(java Event)# java.util.Eventobject,java.util.EventListener# victor# 2016.06.16 Java 事件处理机制 java中的事件机制的参与者有3种角色:    1. event object:事件状态对象,是一类事件的实例.        伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject.事件状态对象作为单参传递给应响应该事件的监听者方法中.

搞清楚Spring事件机制后:Spring的源码看起来简单多了

本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后持续阅读. Spring框架已然是Javaeee开发领域的霸主,无论是使用SpringBoot还是SpringCloud,都离不开Spring框架. 作为Java开发者,无论是面试求职还是日常开发,就必须得熟练掌握.运用Spring框架. 因此学习Spring框架源码也就成为了大家最重要的事情之一.

锁机制---信号机制----事件机制

锁机制 防止数据混乱 , 保护对进程的数据安全性 锁涉及两个操作: 拿钥匙锁门  -------   不让别人进屋   (  其它 进程若想 进屋  要在外边等待 ,  等其出来后还回钥匙,才能进去  ) 还钥匙 开门 -------  让别人进屋 from  multiprocessing  import  Lock    先要导入模块 l = Lock()     实例化一个锁机制  即对象锁     不用传参数     这把锁只有一把钥匙 l.acquire()      锁门    拿走

锁机制,信号量机制,事件机制

IPC -- inter process Communication  进程间通信 守护进程随着父进程的代码执行完毕才结束 代码:from multiprocessing import Processimport time def func1(): for i in range(65,90): print(chr(i)) time.sleep(0.5) def func(): for i in range(10): print(i) time.sleep(0.5) if __name__ ==

【Python下进程同步之互斥锁、信号量、事件机制】 -- 2019-08-16 17:58:28

原文: http://blog.gqylpy.com/gqy/229 " 一.锁机制:??multiprocess.Lock 上篇博客中,我们千方百计实现了程序的异步,让多个任务同时在几个进程中并发处理,但它们之间的运行没有顺序.尽管并发编程让我们能更加充分的利用io资源,但是也给我我们带来了新问题,多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题. 例: # 多进程抢占输出资源 from multiprocessing import Process from os import

【Python下进程同步之互斥锁、信号量、事件机制】 𪕽

原文: http://blog.gqylpy.com/gqy/229 " 一.锁机制:??multiprocess.Lock 上篇博客中,我们千方百计实现了程序的异步,让多个任务同时在几个进程中并发处理,但它们之间的运行没有顺序.尽管并发编程让我们能更加充分的利用io资源,但是也给我我们带来了新问题,多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题. 例: # 多进程抢占输出资源 from multiprocessing import Process from os import